R-如何将列表列表转换为具有唯一索引的矩阵

R-如何将列表列表转换为具有唯一索引的矩阵,r,list,R,List,我有一张这样的清单 [[1]] users V1 1 28 3 2 33 1 3 35 4 4 260 1 [[2]] users V1 1 33 2 2 260 1 3 285 13 如何使用R创建这样的表 users V1 V2 1 28 3 NA 2 33 1 2 3 35 4

我有一张这样的清单

[[1]] 
     users V1
 1      28  3
 2      33  1
 3      35  4
 4     260  1

[[2]]
     users V1
 1      33  2
 2     260  1
 3     285 13
如何使用R创建这样的表

     users    V1    V2
 1      28     3    NA
 2      33     1     2
 3      35     4    NA
 4     260    NA     1
 5     285    13    NA
你可以试试

 Reduce(function(...) merge(..., by='users', all=TRUE), lst)
 #   users V1.x V1.y
#1    28    3   NA
#2    33    1    2
#3    35    4   NA
#4   260    1    1
#5   285   NA   13
另一种选择是使用
plyr
中的
join_all
。但是,这需要对
by=
中使用的列名以外的列名进行不同的命名

library(plyr)
nm1 <- make.names(sapply(lst, colnames)[-1,],unique=TRUE)
join_all(Map(function(x,y) {names(x)[-1] <- y; x}, lst, nm1),
                                      by='users', type='full')
#   users V1 V1.1
#1    28  3   NA
#2    33  1    2
#3    35  4   NA
#4   260  1    1
#5   285 NA   13
库(plyr)

nm1您可以使用列表中的
do.call
merge

l <- list(structure(list(users = c(28, 33, 35, 260), V1 = c(3, 1, 
    4, 1)), .Names = c("users", "V1"), row.names = c(NA, -4L), class = "data.frame"), 
    structure(list(users = c(33, 260, 285), V1 = c(2, 1, 13)), .Names = c("users", 
    "V1"), row.names = c(NA, -3L), class = "data.frame"))

do.call(merge, c(l, list(all = TRUE, by = "users")))
#  users V1.x V1.y
#1    28    3   NA
#2    33    1    2
#3    35    4   NA
#4   260    1    1
#5   285   NA   13

我能帮你吗?这可能是某种@DavidArenburg的骗局谢谢,我没注意到
l <- list(structure(list(users = c(28, 33, 35, 260), V1 = c(3, 1, 
    4, 1)), .Names = c("users", "V1"), row.names = c(NA, -4L), class = "data.frame"), 
    structure(list(users = c(33, 260, 285), V1 = c(2, 1, 13)), .Names = c("users", 
    "V1"), row.names = c(NA, -3L), class = "data.frame"))

do.call(merge, c(l, list(all = TRUE, by = "users")))
#  users V1.x V1.y
#1    28    3   NA
#2    33    1    2
#3    35    4   NA
#4   260    1    1
#5   285   NA   13