2017-06-22 26 views
0

我在读该数据集:如何筛选R中关于一列的列?

image

而且我想在“weather_description”过滤重复的值每次它发生。但是,如果它再次出现在数据集中,则不应该将其删除,我只想在每次该列都具有重复值的情况下删除此变量。输出应该是这样的:

2015-01-0101:00:00 sky is clear 1420070400 
2015-01-0102:00:00 scattered clouds 1420074000 
2015-01-0104:00:00 sky is clear 1420081200 

在R中有这样做的简单方法吗?

+1

您可以通过或不同横跨3列wan't一个简单的基团。 Google dplyr。 – CodeMonkey

回答

0

这是与骨料碱溶液:

aggregate(Time ~ .,df,head,1) 
0

使用dplyr每@CodeMonkey:

df %>% 
mutate(grouper = cumsum(weather_description == lag(weather_description, default = first(weather_description)))) %>% 
group_by(grouper) %>% 
summarise(Time = first(time), 
      weather_description = first(weather_description), 
      timestamps = first(timestamps)) 
0

请让我知道,如果这个解决方案的基础R为你工作:

该数据

df <- data.frame(Time = c(as.Date(16436),as.Date(16437),as.Date(16437),as.Date(16437), 
          as.Date(16437),as.Date(16438),as.Date(16438),as.Date(16438), 
          as.Date(16438),as.Date(16439),as.Date(16439),as.Date(16439)), 
       weather_description = c("sky is clear", 
             "scattered clouds")[c(1,2,2,2,2,2,2,2,2,1,1,1)]) 
df 
#   Time weather_description 
#1 2015-01-01  sky is clear 
#2 2015-01-02 scattered clouds 
#3 2015-01-02 scattered clouds 
#4 2015-01-02 scattered clouds 
#5 2015-01-02 scattered clouds 
#6 2015-01-03 scattered clouds 
#7 2015-01-03 scattered clouds 
#8 2015-01-03 scattered clouds 
#9 2015-01-03 scattered clouds 
#10 2015-01-04  sky is clear 
#11 2015-01-04  sky is clear 
#12 2015-01-04  sky is clear 

功能

weather_changes <- function(dat){ 
    # split by weather description 
    splitted <- split(dat, dat[,2]) 
    # for each, return only the first dates of a sequence 
    byweather <- lapply(splitted, function(x) x[-which(c(0,ifelse(diff(x[,1])<2,1,0))==1),]) 
    # combine to a single data.frame 
    newdf <- do.call(rbind, byweather) 
    # order by date 
    newdf <- newdf[order(newdf[,1]),] 
    # remove the messy row names 
    rownames(newdf) <- NULL 
    newdf 
} 
weather_changes(df) 
#  Time weather_description 
#1 2015-01-01  sky is clear 
#2 2015-01-02 scattered clouds 
#3 2015-01-04  sky is clear