我有几个数据帧要合并到一个大数据帧中。此外,我想在这个新的数据帧中添加一列,指示数据源自哪个数据帧。我确实做了一个相当粗糙的方法:
exports_all<- rbind((mutate(Dai15_Dai3_1, sentiment = factor("week1"))),
(mutate(Dai15_Dai3_2, sentiment = factor("week2"))),
(mutate(Dai15_Dai3_3, sentiment = factor("week3"))),
(mutate(Dai15_Dai3_4, sentiment = factor("week4"))),
(mutate(Dai15_Dai3_5, sentiment = factor("week5"))),
(mutate(Dai15_Dai3_6, sentiment = factor("week6"))),
(mutate(Dai15_Dai3_7, sentiment = factor("week7"))))
产品:
Region_ID Sv_mean Week
1 10 -64.01115 week1
2 10 -64.96363 week1
3 10 -67.98841 week1
4 13 -66.88734 week2
5 13 -69.79789 week2
6 13 -69.94071 week2
7 15 -66.04855 week3
8 15 -68.31167 week3
9 15 -68.67383 week3
我正试图找到一种更优雅的方式来做这件事。我在这里使用的数据分为7周,但明年的数据可能会有所不同(前一年也有12周(。我正在努力寻找一种解决方案,当遇到不同的周数时,它不会堵塞。
我确实取得了一些进展,但我找到的唯一解决方案是插入一个具有原始数据帧的列,而不是我所需要的。
exports_all<- mget(ls(pattern = 'Dai15_Dai3_*')) %>%
map_df(I, .id = 'Week')
我们可能需要修改list
的名称,因为mget
返回一个以名称为对象名称的named
列表。
library(dplyr)
mget(ls(pattern = 'Dai15_Dai3_*')) %>%
setNames(paste0("Week", seq_along(.))) %>%
bind_rows(.id = "Week") %>%
relocate(Week, .after = last_col())
如果它应该替换原始名称中的子字符串
library(stringr)
mget(ls(pattern = 'Dai15_Dai3_*')) %>%
setNames(str_replace(names(.), ".*_(\d+)$", "Week\1")) %>%
bind_rows(.id = "Week") %>%
relocate(Week, .after = last_col())
注意:bind_rows
就足够了,因为我们没有在每个list
元素中应用任何函数(在OP的代码中,I
(标识(被用作.f
的占位符(