假设这是我的列表结构
lst=list(structure(c("level1", "level2", "level4", "level5","18", "abc", "pqr", "lmn"),
.Dim = c(4L, 2L)),
structure(c("level1", "level2", "level3", "level5", "level6", "20", "xyz", "hive", "foo", "bar"),
.Dim = c(5L, 2L)),
structure(c("level1", "level3", "level4", "level5","level6", "22", "dark", "yellow","foobar", "blue"),
.Dim = c(5L, 2L)),
structure(c("level1", "level2", "level3", "level5","level6","level7","24", "dvd", "dxs","glass", "while","though"),
.Dim = c(6L, 2L))
)
期待像这样的 O/P
level1 level2 level3 level4 level5 level6 level7
1) 18 abc NA pqr lmn NA NA
2) 20 xyz hive NA foo bar NA
3) 22 NA dark yellow foobar blue NA
4) 24 dvd dxs NA glass while though
所有列表中的第一列应该被转置,相应的数据应该被查找到它们的行。
尝试将所有行转置为列本身,给出错误
unique(t(list_temp[[c(1,2)]][,1]))
ERROR:Error in list_temp[[c(1, 2)]][, 1] : incorrect number of dimensions
也试过
apply(list_temp,1,function(x){list_temp[[x]][,1]})
但是给了我
Error in apply(list_temp, 1, function(x) { :
dim(X) must have a positive length
关于如何完成的任何建议。
谢谢。
最佳答案
两种做法:
1) 使用 data.table -package
和:
library(data.table)
dcast(rbindlist(lapply(lst, as.data.table), idcol = 'id'),
id ~ V1, value.var = 'V2')[, id := NULL][]
你得到:
2) 使用基 R
和:
reshape(transform(do.call(rbind.data.frame, lst),
r = rep(seq_along(lst), lengths(lst)/2)),
idvar = 'r', timevar = 'V1', direction = 'wide')[,-1]
你得到:
关于r - 将列表行转置为数据框,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45754427/