【发布时间】:2019-06-26 22:25:44
【问题描述】:
我想根据列表的第一个元素创建一个数据框。具体来说,我有
names1 <- c("a", "b", "c")
dat1 <- data.frame(names1 =c("a", "b", "c", "f"),values= c("val1", 13, 11, 0))
dat1$values <- as.factor(dat1$values)
dat2 <- data.frame(names1 =c("a", "b", "x"),values= c(12, 10, 2))
dat2$values <- as.factor(dat2$values)
list1 <- list(dat1, dat2)
结果应该是一个新的数据框,其中包含变量“名称”和与每个列表部分匹配的所有值:
a b c
val1 13 11
12 10 NA
【问题讨论】:
-
一个
data.table解决方案:library(data.table); rbindlist(lapply(list1, function(x) setNames(transpose(x)[2,], x$names)), use.names=TRUE, fill=TRUE)[,.SD, .SDcols=(a:c)]。