r - 合并多个数据框,同时添加具有相应数据框名称的新列
问题描述
我有一个数据框列表
my_list <- list(structure(c("23000 Vs 23500", "23500 Vs 24000", "1.03546847852537",
"0.735744771309744", "15", "29"), .Dim = 2:3, .Dimnames = list(
NULL, c("Group", "EffectSize", "RequiredReplicates"))), structure(c("23500 Vs 24000",
"24000 Vs 25000", "25000 Vs 25500", "0.735744771309744", "1.48620682621918",
"0.418877850096638", "29", "7", "89"), .Dim = c(3L, 3L), .Dimnames = list(
NULL, c("Group", "EffectSize", "RequiredReplicates"))), structure(c("26000 Vs 26500",
"26500 Vs 27000", "27000 Vs 27500", "0.0739021800199834", "0.14116830704947",
"0.135704984161555", "2874", "788", "852"), .Dim = c(3L, 3L), .Dimnames = list(
NULL, c("Group", "EffectSize", "RequiredReplicates"))))
names(my_list) <- paste0("tt", 1:3)
我想要的是添加一个grp
带有数据框名称的新列并将它们全部 rbind 以创建一个数据框。
lapply(
my_list,
function(x) {
x$grp <- deparse(substitute(x))
rbind(x)
}
)
我想要的结果:
Group EffectSize RequiredReplicates grp
"23000 Vs 23500" "1.03546847852537" "15" tt1
"23500 Vs 24000" "0.735744771309744" "29" tt1
"23500 Vs 24000" "0.735744771309744" "29" tt2
"24000 Vs 25000" "1.48620682621918" "7" tt2
"25000 Vs 25500" "0.418877850096638" "89" tt2
"26000 Vs 26500" "0.0739021800199834" "2874" tt3
"26500 Vs 27000" "0.14116830704947" "788" tt3
"27000 Vs 27500" "0.135704984161555" "852 tt3
谢谢你的帮助!
解决方案
1) data.table将每个组件转换为 data.table 然后使用rbindlist
withidcol
参数。
library(data.table)
my_list_nms <- setNames(my_list, paste0("tt", seq_along(my_list)))
rbindlist(lapply(my_list_nms, as.data.table), idcol = "id")
给出这个data.table:
id Group EffectSize RequiredReplicates
1: tt1 23000 Vs 23500 1.03546847852537 15
2: tt1 23500 Vs 24000 0.735744771309744 29
3: tt2 23500 Vs 24000 0.735744771309744 29
4: tt2 24000 Vs 25000 1.48620682621918 7
5: tt2 25000 Vs 25500 0.418877850096638 89
6: tt3 26000 Vs 26500 0.0739021800199834 2874
7: tt3 26500 Vs 27000 0.14116830704947 788
8: tt3 27000 Vs 27500 0.135704984161555 852
2) purrr 使用 purrr 和 tibble 也可以做到。 my_list_nms
是从上面。
library(purrr)
library(tibble)
map_dfr(my_list_nms, as_data_frame, .id = "id")
给这个小标题:
# A tibble: 8 x 4
id Group EffectSize RequiredReplicates
<chr> <chr> <chr> <chr>
1 tt1 23000 Vs 23500 1.03546847852537 15
2 tt1 23500 Vs 24000 0.735744771309744 29
3 tt2 23500 Vs 24000 0.735744771309744 29
4 tt2 24000 Vs 25000 1.48620682621918 7
5 tt2 25000 Vs 25500 0.418877850096638 89
6 tt3 26000 Vs 26500 0.0739021800199834 2874
7 tt3 26500 Vs 27000 0.14116830704947 788
8 tt3 27000 Vs 27500 0.135704984161555 852
推荐阅读
- javascript - 如何在文本和表格之间切换?
- hadoop - HDFS 的 HUE 和 Job Scheduler 安装
- wordpress - Wordpress 添加具有 3 个以上子菜单的管理菜单
- java - 尝试使用java从webapp在datalake中创建文件
- c# - 如何为组合框设置默认值?
- java - 提示时数据库表不更新
- scala - 除了 Play Framework 中的可读性之外,还有什么理由使用 Action.async 吗?
- java - androidx.appcompat.widget.SearchView setSearchableInfo() 在某些设备上抛出 Resources$NotFoundException
- javascript - 什么都不显示,除了背景颜色 - React(只显示空白网站)
- android - 在 NavigationView 中聚焦菜单的第一项