我想删除任何行,其中value
的a
> = b
,但我不知道如何做到这一点。
样本数据:
df <- data.frame(day = c(1, 1, 2, 2, 3, 3), var = c("a", "b", "a", "b", "a", "b"), value = c(1, 2, 3, 3, 2, 1)
输出:
day var value
1 1 a 1
2 1 b 2
3 2 a 3
4 2 b 3
5 3 a 2
6 3 b 1
所需的输出:
day var value
1 1 a 1
2 1 b 2
这是一个data.table解决方案,可避免从长到宽:
dt <- data.table(df)
dt[,if(value[var == 'a'] >= value[var == 'b']) .SD,by = day]
编辑:我现在意识到您想要的输出不适合您的初始不等式,因此调整不等式以匹配:)
EDIT2:如果您不想在data.table中执行此操作,那么这是dplyr解决方案
df %>% group_by(day) %>% filter(value[var == 'a'] >= value[var == 'b'])
EDIT3:如果您想将NA放入其中
df %>% group_by(day) %>% mutate(value = if(value[var == 'a'] >= value[var == 'b']) as.numeric(NA) else value)
EDIT4:注意,最后一个解决方案似乎暴露了一个错误,其中NA的处理方式很奇怪,请参见此处:为什么dplyr删除条件未满足的值?
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句