У меня есть список data.tables, которые мне нужно связать, однако мне нужны только последние X столбцов.
Мои данные структурированы следующим образом:
DT.1 <- data.table(x=c(1,1), y = c("a","a"), v1 = c(1,2), v2 = c(3,4))
DT.2 <- data.table(x=c(1,1), y = c("a","a"), v3 = c(5,6))
DT.3 <- data.table(x=c(1,1), y = c("a","a"), v4 = c(7,8), v5 = c(9,10), v6 = c(11,12))
DT.list <- list(DT.1, DT.2, DT.3)
>DT.list
[[1]]
x y v1 v2
1: 1 a 1 3
2: 1 a 2 4
[[2]]
x y v3
1: 1 a 5
2: 1 a 6
[[3]]
x y v4 v5 v6
1: 1 a 7 9 11
2: 1 a 8 10 12
Столбцы x и y одинаковы для каждой таблицы data.tables, но количество столбцов различается. Выходные данные не должны содержать повторяющихся столбцов x и y. Это должно выглядеть следующим образом:
x y v1 v2 v3 v4 v5 v6
1: 1 a 1 3 5 7 9 11
2: 1 a 2 4 6 8 10 12
Я хочу избежать использования цикла. Я могу связать data.tables с помощью do.call("cbind", DT.list)
, а затем удалить дубликаты вручную, но есть ли способ, при котором дубликаты вообще не создаются? Кроме того, важна эффективность, поскольку списки могут быть длинными с большими таблицами данных.
спасибо
do.call(cbind,DT.list)[,.SD,.SDcols=unique(unlist(lapply(DT.list,names)))]
- person nicola   schedule 15.07.2015!duplicated
т.е.dt1 <- do.call(cbind,DT.list);dt1[!duplicated(colnames(dt1))]
- person akrun   schedule 15.07.2015