[英]Complex filtering with data.table R
我试图在data.frame(或data.table )中按不同的组选择信息,但是没有找到正确的方法。 考虑以下示例:
DF <- data.table(value=c(seq(5,1,-1),c(5,5,3,2,1)),group=rep(c("A","B"),each=5),status=rep(c("D","A","A","A","A"),2))
value group status
1: 5 A D
2: 4 A A
3: 3 A A
4: 2 A A
5: 1 A A
6: 5 B D
7: 5 B A
8: 3 B A
9: 2 B A
10: 1 B A
我现在想在状态为活动状态(“ A”)时按组获取最大值。 我已经试过了:
DF[,.I[value==max(value[status!="D"])],by=group]
group V1
1: A 2
2: B 6
3: B 7
但是第六行的状态为“ D”(已死),我想避免该行。 我不能像这样子集数据:
DF[status!="D",.I[value==max(value[status!="D"])],by=group]
因为我需要按组计算不同的统计信息,例如(不起作用):
DF[,list("max"=max(value[status!="D"],na.rm=T),"group"=group[.I[value==max(value[status=="D"],na.rm=T)]]),by=group]]
任何提示将不胜感激!
如果我们需要基于不是“ D”的“状态”的索引,并且“值”是按“组”分组的“值”的max
i1 <- DF[status != "D", .I[value == max(value)], by = group]$V1
使用索引进行进一步汇总
DF[i1, .SD[value == max(value)], group]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.