r - 转换数据框列表:不是简单的 rbind,第二行到新列
问题描述
转换数据框列表:不是简单的 rbind,第二行到新列
我有一个清单
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,问题就解决了。我看不到解决我的问题的方法。 将数据帧列表转换为一个数据帧
阅读本文后, 当 我开始使用不同的列集时,按行组合两个数据帧(rbind)
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
将多个数据框绑定在一起。
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
我们可以稍后根据自己的喜好重命名列。
推荐阅读
- excel - 是否有一个excel函数可以复制同一行,只增加一个单元格
- python-3.x - TF 2.0 - 方法 estimator.model_to_estimator( ) 失败但 model.fit 适用于 tf.keras 创建的模型
- javascript - JS函数调用被另一个替换
- c++ - 如何在 Visual Studio 代码中完成后暂停控制台 C++ 应用程序
- java - 在一个范围内查找 gcd 并更新
- clang - Clang 不解析具有部分特化的模板:template < class T, class U = TYPE_A
> 类 TYPE_B; - python - python memoryview比预期慢
- python-3.x - 使用 lambda 函数从数据帧中 2 列中的值之间的增量计算绝对值
- discord.js - 有没有办法在处理程序命令中创建子文件夹?
- r - 具有输入的每一行数据帧的 map_dfc