У меня есть 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
Каждый data.frame в col2 имеет два столбца colA и colB.Я хотел бы иметь вывод data.table, который связывает каждую уникальную строку этих фреймов данных, основанную на col1 DT.Я думаю, это похоже на использование rbindlist
в статистической функции data.table.
Это желаемый результат:
> #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]
) имеет повторяющиеся записи, и для каждого уникального столбца требуются только уникальные записи.
Я попробовал следующее, и я получил ошибку.
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
В любом случае можно использовать rbindlist
в статистической функции data.table?