我在R中有两个数据框,其中一个很大(例如150000个观测值包含160个变量),另一个较小((76个观测值包含5个变量)。
大数据框中的一个变量是将国家/地区保存为字符串,而另一个则由各个国家/地区和特定特征组成。现在,我想在我的新数据框中构造新变量,方法是为每个特征添加列,并将观察值与其相应国家的特征链接起来。但是,我有一些问题:
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
似乎我需要自己对功能进行硬编码吗?
答案 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'))