r - 如何将 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'}
解决方案
也许这个?
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
推荐阅读
- c# - 在 Unity3d 中按 Vuforia 虚拟按钮不会旋转立方体
- java - 使用 procrun 在作为服务运行的 java 应用程序上启用 jmx 身份验证
- c# - 带有认证交付的 DocuSign SIGNING_GROUP_INVALID
- c++ - C++ wrt字符串中的STL排序函数
- cookies - 如何使用 GTM 使 _ga cookie 的 CookieBot 横幅显示 13 个月?(GDPR)
- vue.js - VuetifyJS 垂直按钮文本
- apache - 无法找到适当类型的密钥来解密 AP REP - 使用 HMAC SHA1-96 的 AES256 CTS 模式
- solidity - 如果 for 循环中的语句没有过滤掉可靠的项目
- google-cloud-platform - 使用数据流 JdbcIO api 写入云 sql
- php - 无法在 Android 中将 Json 数组转换为 Json 对象?