使用data.table R进行复杂过滤

时间:2017-08-15 15:33:05

标签: r data.table

我正在尝试在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

我现在想要在状态有效时按组获取最大值(&#34; A&#34;)。我试过这个:

DF[,.I[value==max(value[status!="D"])],by=group]

       group V1
1:     A  2
2:     B  6
3:     B  7

但第6行是状态&#34; D&#34; (死了)我想避开这一行。我不能像这样对数据进行子集化:

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]]

任何提示都将不胜感激!

1 个答案:

答案 0 :(得分:2)

如果我们需要一个基于'状态'的指数不是'D'而且'价值'是'{'的i1 <- DF[status != "D", .I[value == max(value)], by = group]$V1 按'组'分组

DF[i1, .SD[value == max(value)], group]

使用索引进一步总结

{{1}}