r - 行绑定许多结构一致但列名不同的数据框
问题描述
我在 R 中有几个具有以下结构的数据框
> df1
messy_col_name1 messy_group_name1
numeric data "group1"
... ...
numeric data "group1"
> df2
messy_col_name2 messy_group_name2
numeric data "group2"
... ...
numeric data "group2"
.
.
.
> dfN
messy_col_nameN messy_group_nameN
numeric data "groupN"
... ...
numeric data "groupN"
所有这些数据框都有 2 列。第一列有实际值,第二列是组名(因子)的字符串。
我想知道是否有一种有效的方法可以逐行绑定这些数据帧,而无需重新标记每个数据帧上的列名。最终对象也应该是一个数据框。目的是使用aov()执行方差分析。最终结果应如下所示:
> df.combined
col_name group
numeric_data "group1"
... ...
numeric_data "group1"
numeric_data "group2"
... ...
numeric_data "group2"
... ...
numeric_data "groupN"
... ...
numeric_data "groupN"
我没有成功使用rbind()、rbind.fill()或bind_rows()等常用函数。
我检查了以下帖子,但是我无法解决此问题:
以下帖子很接近:
但是,当有很多数据帧时,这篇文章中的解决方案效率不高。
解决方案
按行绑定数据帧确实需要它们具有相同的列名。每个数据帧重新标记可能与任何其他解决方案一样有效。
我会列出数据框;这允许使用lapply
重命名列。然后你可以使用do.call(rbind)
or dplyr::bind_rows()
。
例如:
library(magrittr) # for the pipes
df.combined <- list(df1, df2, df3) %>%
lapply(., function(x) setNames(x, c("col_name", "group"))) %>%
do.call(rbind, .)
或使用dplyr
:
library(dplyr)
df.combined <- list(df1, df2, df3) %>%
lapply(., function(x) setNames(x, c("col_name", "group"))) %>%
bind_rows()
我敢打赌,使用包中的一个映射函数还有一个优雅的解决方案purrr
。
推荐阅读
- css - 我怎样才能给 flex div 的一部分更大的尺寸?
- sql-server - 从查询结果创建表
- json - Javascript 在循环中显示格式错误的 JSON 对象的错误
- machine-learning - 使用 RNN/LSTM 检测速度变化(给定当前 xy 位置)
- python-3.x - 将不同长度的嵌套列表的 Python dict 导出到 csv。如果嵌套列表有 > 1 个条目,则在移动到下一个键之前展开到列
- javascript - 格式化 JSON 日期时间
- apache-kafka - 如何将主题访问权限授予特定用户?
- c# - 转换方法签名和修改方法体
- python - 在 pandas 中,如何创建由 id 索引的数据框以及每个外观具有单独内容的列?
- asp.net-core - aspnet核心中的razorview和razorlayout有什么区别