r - 将数据帧列表 : not a simple rbind, 第二行转换为新列

标签 r dplyr bind rows

转换数据框列表:不是简单的 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/

相关文章:

r - Shiny 的文件输入接受所有文件类型

r - 使用 dplyr 根据列值创建组 (group_by)

c++11 - 为什么 C++ 标准不禁止这种可怕的用法?

r - 根据特定标记从数据框中拆分字符列

r - 选择列,如果不存在则跳过

node.js - Node js将请求绑定(bind)到不同的接口(interface)或IP地址

c - 解析并绑定(bind)到 IPv6 地址

r - 在R中使用scale函数后如何获得中心和比例

r - 删除/覆盖 R 中的 print() 消息

r - 在 Shiny 中为表格的每一行选择输入