如何在R中将不同大小的DataFrame列表转为每行对应一个原表的新表
将列表中的DataFrame转换为每行对应一个DataFrame、列值为分号分隔字符串的新DataFrame
示例数据
先定义你的数据(注意不要用list作为变量名,避免覆盖R内置函数):
df1 <- data.frame(d=c(0,1,2),n=c(5,5,5),i=c(2,3,3)) df2 <- data.frame(d=c(0,1,2,3),n=c(5,5,5,5),i=c(2,3,3,4)) df_list <- list(df1, df2)
解决方案
方法1:使用tidyverse工具(purrr + dplyr)
通过map_dfr遍历列表并按行绑定结果,用str_c将列元素拼接为分号分隔的字符串:
library(tidyverse) new_df <- map_dfr(df_list, function(df) { df %>% summarise(across(everything(), ~str_c(., collapse = ";"))) })
方法2:Base R实现
无需额外安装包,用基础函数完成转换:
new_df <- do.call(rbind, lapply(df_list, function(df) { as.data.frame(lapply(df, function(col) paste(col, collapse = ";")), stringsAsFactors = FALSE) }))
验证结果
运行上述代码后,new_df的输出符合预期:
> new_df d n i 1 0;1;2 5;5;5 2;3;3 2 0;1;2;3 5;5;5;5 2;3;3;4
内容的提问来源于stack exchange,提问作者MAJ
相关产品推荐
相关产品推荐

