假设我有2个数据帧。我想从每个数据帧中选择一行,让我们说行业c3,并将它们放在另一个data.frame,df3中。
df1 = data.frame(Industries = c("c1", "c2", "c3", "c4", "c5"), Exports = c(100, 40, 30, 10, 50), Imports =c(90,50,25,15,50))
df2 = data.frame(Industries = c("c1", "c2", "c3", "c4", "c5"), Exports = c(20, 90, 10, 30, 60), Imports =c(40,30,25,55,40))
df1
Industries Exports Imports
1 c1 100 90
2 c2 40 50
3 c3 30 25
4 c4 10 15
5 c5 50 50
df2
Industries Exports Imports
1 c1 20 40
2 c2 90 30
3 c3 10 25
4 c4 30 55
5 c5 60 40
在我的实际数据中,我有16个不同的数据帧,因此如果可能,代码应该允许将16个数据帧中的16行放入另一个数据帧中,这将被创建。
答案 0 :(得分:0)
假设您的列始终相同,您可以使用dplyr和purrr包执行以下操作:
library(purrr)
library(dplyr)
df1 = data.frame(Industries = c("c1", "c2", "c3", "c4", "c5"), Exports = c(100, 40, 30, 10, 50), Imports =c(90,50,25,15,50))
df2 = data.frame(Industries = c("c1", "c2", "c3", "c4", "c5"), Exports = c(20, 90, 10, 30, 60), Imports =c(40,30,25,55,40))
list(df1, df2) %>% map_df(~ filter(., Industries == "c3"))
#> Industries Exports Imports
#> 1 c3 30 25
#> 2 c3 10 25
list(df1, df2)
正在将您的数据框组合成一个列表map_df
对每个进行迭代,承诺(如果可能)将结果作为数据框返回。~ filter(., Industries == "c3")
是在每个数据框上运行的函数,它仅返回Industries == "c3"
的行。答案 1 :(得分:0)
我们可以使用data.table
。将数据集放在list
mget
和paste
,rbind
数据集list
(rbindlist
)中,设置'关键字'作为'Industries'并将列
library(data.table)
setkey(rbindlist(mget(paste0("df", 1:2))), "Industries")["c3"]
# Industries Exports Imports
#1: c3 30 25
#2: c3 10 25