如何为R列表中多数据框合并后的新数据框自动设置列名
在R中合并列表内的数据框并自动用列表名称命名列
解决方法
核心思路
要实现自动用列表元素名称命名合并后的列,需要先给列表中的每个数据框指定自定义名称,再将每个数据框的Value列重命名为对应列表元素的名称,最后完成合并。
完整代码示例
library(tidyverse) # 原始数据列表 data <- list(structure(list(Date = c(1, 2, 3), Value = c(4, 5, 6)), class = "data.frame", row.names = c(NA, -3L)), structure(list(Date = c(1, 2, 3), Value = c(7, 8, 9)), class = "data.frame", row.names = c(NA, -3L)), structure(list(Date = c(1, 2, 3), Value = c(10, 11, 12 )), class = "data.frame", row.names = c(NA, -3L))) # 一步完成列表命名、列重命名与合并 data %>% set_names(c("a", "b", "c")) %>% # 给列表中的数据框指定自定义名称 imap(~ rename(.x, !! .y := Value)) %>% # 将每个数据框的Value列重命名为对应列表元素名 reduce(full_join, by = "Date") # 按Date列合并所有数据框
运行结果
Date a b c 1 1 4 7 10 2 2 5 8 11 3 3 6 9 12
代码说明
set_names(c("a", "b", "c")):为列表中的三个数据框分别赋予自定义名称a、b、cimap(~ rename(.x, !! .y := Value)):imap会同时遍历列表元素(.x指代当前数据框)和元素名称(.y指代当前数据框的列表名称),!! .y := Value是非标准评估语法,实现将当前数据框的Value列重命名为对应列表元素的名称reduce(full_join, by = "Date"):按Date列依次合并所有处理后的数据框,由于所有数据框的Date列完全匹配,使用left_join也能得到相同结果
内容的提问来源于stack exchange,提问作者Tanga94
相关产品推荐
相关产品推荐

