首页 > 解决方案 > 如何将 group_by 和 summise 函数与条件一起使用?

问题描述

我有一个数据集,其中包含“时间”、“状态”和“水位”三列。时间变量的格式类似于“2007-03-22 06:45:00”并且跨越多年。status 是一个二进制变量,只有“High”或“Low”两个值(您可以想象一个传感器已经测量了很多年,日复一日,一分钟一分钟,并决定测量值是低还是高)。

 time   status   water_level 
2007-03-21 06:20:00 Low  2.4 
2007-03-21 19:55:00 Low  2.3 
2007-03-21 23:50:00 High 2.1 
2016-04-10 19:55:00 Low  3.5 
2016-04-11 23:50:00 High 3.6

我的目标是仅当该月的“高”和“低”的数量相等时才计算每个月内水位的平均值,否则我希望完全删除该月。

我尝试了 group_by 和 summarise 函数,但无法合并条件并且不知道该怎么做。因此,如果有人可以帮助我,我将不胜感激。

mydata <- mydata %>% 
          group_by(time = floor_date(time, "month")) %>%
                 if(length(status == 'High') == length(status == 'Low')
                 {summarize(water_level = mean(water_level)}
                   else {summarize(water_level = 'NA'}

标签: r

解决方案


也许这个?

df %>% 
  mutate(month= months(time)) %>% 
  add_count(month, status) %>% 
  group_by(month) %>% 
   filter(length(unique(n)) == 1) %>% 
   summarise(mean_water_level = mean(water_level, na.rm=T))
# A tibble: 1 x 2
  month mean_water_level
  <chr>            <dbl>
1 April             3.55

如果有几个月只有一个 stutus 在过滤器中包含这个词 & length(unique(status)) == 2


推荐阅读