簡體   English   中英

data.table 條件聚合到列表列

[英]data.table conditional aggregation to list column

我正在嘗試從 data.table 聚合數據以創建一個新列,該列是有條件的先前行的列表。

dt <- data.table(id = c(1,1,1,1,2,2,10,10,10), letter = c('a','a','b','c','a','c','d','d','e'))

先前的示例將此作為解決方案。

dt[, list(lst=list(letter)), by=id]

   id     lst
   1 a,a,b,c
   2     a,c
   10   d,d,e

我有一個額外的要求,它只在 id 差異小於前一個值的 2 時才聚合

解決方案將接近此:

data.table(groupid=c(1,2),lst=c(list(c('a,a,b,c,a,c')),list(c('d,d,e'))))

groupid         lst
1:              a,a,b,c,a,c
2:              d,d,e
dt[, .(lst = list(letter)), by = .(groupid = cumsum(c(TRUE, diff(id) > 1)))]
#    groupid         lst
#      <int>      <list>
# 1:       1 a,a,b,c,a,c
# 2:       2       d,d,e

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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