转换数据框列表:不是简单的 rbind,第二行到新列
我有一个 list
employeesList = list(data.frame(first = ("Al"), second = "Jones"),
data.frame(first = c("Al", "Barb"), second = c("Jones", "Smith")),
data.frame(first = c("Al", "Barb", "Carol"), second = c("Jones", "Smith", "Adams")),
data.frame(first = ("Al"), second = "Jones"))
我想制作这个。
employeesDF = data.frame(first = c("Al", "Al", "Al", "Al"), second = c("Jones", "Jones", "Jones", "Jones"),
first2 = c(NA, "Barb", "Barb", NA), second2 = c(NA, "Smith", "Smith", NA),
first3 = c(NA, NA, "Carol", NA), second3 = c(NA, NA, "Adams", NA))
我希望每个数据框都是结果数据框中的一行。 请注意,转换时的第一个数据框将有两列,转换时的第二个 df 将有四列,转换时的第三个 df 将产生 6 列,转换时的第四个 df 将产生 2 列,依此类推。我意识到必须填写 NA 值 我做了一些研究,如果目标只是 rbind,问题就解决了。我看不到解决我的问题的方法。 Convert a list of data frames into one data frame
看完之后 Combine two data frames by rows (rbind) when they have different sets of columns 我开始了
res1 = cbind(t(employeesList[[1]][1]), t(employeesList[[1]][2]))
res2 = cbind(t(employeesList[[2]][1]), t(employeesList[[2]][2]))
res3 = cbind(t(employeesList[[3]][1]), t(employeesList[[3]][2]))
res4 = cbind(t(employeesList[[4]][1]), t(employeesList[[4]][2]))
然后
library(dplyr)
bind_rows(list(res1, res2, res3, res4))
但我可能有非常多的数据帧 -- res1, …, resn。列数事先未指定,但可能少于 10。我的程序没有命名列,我认为 bind_rows 需要这样做。
最佳答案
我们可以使用 lapply
将列表转换为单行数据框,然后使用 bind_rows
将多个数据框绑定(bind)在一起。
library(dplyr)
bind_rows(lapply(employeesList, function(x) rbind.data.frame(c(t(x)))))
# X.Al. X.Jones. X.Barb. X.Smith. X.Carol. X.Adams.
#1 Al Jones <NA> <NA> <NA> <NA>
#2 Al Jones Barb Smith <NA> <NA>
#3 Al Jones Barb Smith Carol Adams
#4 Al Jones <NA> <NA> <NA> <NA>
稍后我们可以根据自己的喜好使用 setNames
重命名列。
关于r - 将数据帧列表 : not a simple rbind, 第二行转换为新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50807970/