我在整洁的数据帧上正在使用过滤器(dplyr)函数:
data1<-data.frame("Time"=c(0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5),
"Variable"=rep(c("a","b","c","d"),6),
"Value"=c(0,1,0,0,1,1,1,1,1,3,2,3,10,1,3,7,2,1,4,2,3,1,5,13))
我想做的是过滤变量“ a”等于2且变量“ a”等于最大值的时间。对于第一种情况,mi代码为:
data1<-data1%>%
group_by(Time)%>%
filter(any(Variable=="a" & Value==2))
工作正常,并给了我:
Time Variable Value
2 a 2
2 b 1
2 c 4
2 d 2
现在不尝试a = max(a),我尝试过:
data1<-data1%>%
group_by(Time)%>%
filter(any(Variable=="a" & Value==max(Value)))
但是不起作用(因为max是在所有列Variable上计算的),我认为我需要值=最大值(值)[变量$ a]。过滤器必须采取这种方式:
Time Variable Value
3 a 10
3 b 1
3 c 3
3 d 7
我更喜欢使用dplyr的解决方案。谁能给我一个关于使用多个条件过滤整洁df的一般规则?
基于已编辑的标准,这将提供所需的结果。
data1 <- data1 %>%
group_by(Time) %>%
filter(any(Variable=="a" &
Value==max(data1$Value[data1$Variable == 'a'])))