假设这是我的列表结构

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/

10-12 18:00