合并R中不相等列名的大数据框

时间:2019-05-10 21:35:47

标签: r

我在R中有两个数据框,其中一个很大(例如150000个观测值包含160个变量),另一个较小((76个观测值包含5个变量)。

大数据框中的一个变量是将国家/地区保存为字符串,而另一个则由各个国家/地区和特定特征组成。现在,我想在我的新数据框中构造新变量,方法是为每个特征添加列,并将观察值与其相应国家的特征链接起来。但是,我有一些问题:

  1. 一个问题是,并非所有国家都在较小的数据框中得到代表,我想在第一帧中删除来自第二个国家中未显示的国家的观测值。
  2. 第二个问题是,由于第二个数据帧的格式如下,所以我似乎无法使用标准合并功能:
Country Var1        Var2        Var3        Var4        Var5
NIC     -0.61252    -0.54723    -0.41597    -0.38825    -0.17819
RWA     -0.60603    -0.28969    -0.57998    -0.05933    -0.14199
GEO     -0.48543    -0.08132    0.56275     -0.25436    0.62782

我的第一个数据帧采用以下方式格式化

CNTRY Var1 Var2 etc

似乎我需要自己对功能进行硬编码吗?

2 个答案:

答案 0 :(得分:0)

您可以使用:

for 1:

library(dplyr)
bigdataframe %>% filter(Country%in%smalldataframe$CNTRY) -> newdataframe

for 2:

merge(smalldataframe, newdataframe, by = c("CNTRY","Country"))

答案 1 :(得分:0)

如果我们称大的df1和小的df2,则您应该能够进行满足您要求的联接。如果我正确理解了您的问题,则需要一个包含许多行(接近150k)的数据框,每个行都附加有country属性。但是,您要删除没有对应国家/地区的任何15万行。

正如@aurelianoguedes所建议的那样,您应该立即进行内部联接,这将消除大数据框中与小df中不匹配的任何行。

df.merged = dplyr::inner_join(df1, df2, by=c('Country' = 'CNTRY'))

带有过滤器+ left_join的旧解决方案:

df.merged = df1 %>%
  filter(Country %in% df2$CNTRY) %>%
  left_join(df2, by=c('Country' = 'CNTRY'))