r-合并多个名称相似的数据帧,并添加一个新列来指示原点



我有几个数据帧要合并到一个大数据帧中。此外,我想在这个新的数据帧中添加一列,指示数据源自哪个数据帧。我确实做了一个相当粗糙的方法:

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的占位符(

相关内容

最新更新