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