簡體   English   中英

使用data.table R進行復雜過濾

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM