【发布时间】:2018-12-04 21:39:50
【问题描述】:
我有一个 data.table 'DT',其中有一列 ('col2'),它是一个数据框列表:
require(data.table)
DT <- data.table(col1 = c('A','A','B'),
col2 = list(data.frame(colA = c(1,3,54, 23),
colB = c("aa", "bb", "cc", "hh")),
data.frame(colA =c(23, 1),
colB = c("hh", "aa")),
data.frame(colA = 1,
colB = "aa")))
> DT
col1 col2
1: A <data.frame>
2: A <data.frame>
3: B <data.frame>
>> DT$col2
[[1]]
colA colB
1 1 aa
2 3 bb
3 54 cc
4 23 hh
[[2]]
colA colB
1 23 hh
2 1 aa
[[3]]
colA colB
1 1 aa
col2 中的每个 data.frame 都有两列 colA 和 colB。
我想要一个 data.table 输出,它根据 DT 的 col1 绑定这些 data.frames 的每个 unique 行。
我想这就像在 data.table 的聚合函数中使用rbindlist。
这是所需的输出:
> #desired output
> output
colA colB col1
1: 1 aa A
2: 3 bb A
3: 54 cc A
4: 23 hh A
5: 1 aa B
第二行 DT (DT[2, col2]) 的数据框有重复的条目,每个唯一的 col1 只需要唯一的条目。
我尝试了以下操作,但出现错误。
desired_output <- DT[, lapply(col2, function(x) unique(rbindlist(x))), by = col1]
# Error in rbindlist(x) :
# Item 1 of list input is not a data.frame, data.table or list
这个“有效”,虽然不是想要的输出:
unique(rbindlist(DT$col2))
colA colB
1: 1 aa
2: 3 bb
3: 54 cc
4: 23 hh
有没有在 data.table 的聚合函数中使用rbindlist?
【问题讨论】:
-
unique(tidyr::unnest(DT[, c("col1","col2")])) -
甚至可以缩短为:
unique(tidyr::unnest(DT)) -
我没有仔细阅读 q 但你想要的输出是
unique(DT[, rbindlist(setNames(col2, col1), id="col1")])
标签: r list data.table aggregate rbindlist