我有两个国家/地区数据数据框。
df1
拥有世界上所有国家/地区。
df2
有一部分国家/地区,但其中一个列中包含人口。
我想获取人口数据并将其添加到国家/地区名称匹配的df1
。
如果df1$Column1 = df2$Column1
(国家/地区名称相同),则使用df1$Column2
(国家/地区人口)中的信息填充df2$Column2
(当前为空),其中行是那个国家的比赛。
我尝试使用列#34; Name"合并两者。他们都有国名:
total <- merge(map,Co2_2x, by="NAME")
列都在那里,但我的新数据帧中有空行。
我希望能够对df1(国家/地区)中的行和列矩阵位置说出&#34;获取行(国家名称在df2
中匹配)和列X(人口数据)。然后将它放在df1
中的此行和列Y矩阵位置(匹配的国家/地区名称的df1
中的新人口列)&#34; ...必须有一个更简单的方法: - )< / p>
以下是我的代码:我想在map$measure
填写国家/地区匹配的Co2_2x$premium
数据。
library(XML)
library(raster)
library(rgdal)
download.file("http://thematicmapping.org/downloads/TM_WORLD_BORDERS_SIMPL-0.3.zip",destfile="TM_WORLD_BORDERS_SIMPL-0.3.zip")
unzip("TM_WORLD_BORDERS_SIMPL-0.3.zip",exdir=getwd())
polygons <- shapefile("TM_WORLD_BORDERS_SIMPL-0.3.shp")
polygons
map <- as.data.frame(polygons)
map$Measure <- 0
library(rvest)
Co2 <- read_html("https://en.wikipedia.org/wiki/List_of_countries_by_carbon_dioxide_emissions")
Co2_2x<-Co2 %>%
html_nodes("table") %>%
.[[1]] %>%
html_table()
names(Co2_2x)[2]<-paste("premium")
names(Co2_2x)[1]<-paste("NAME")
total <- merge(map,Co2_2x, by="NAME")
谢谢!
答案 0 :(得分:0)
您可以在R中使用sqldf
库。
只需按照以下代码操作即可。您将能够合并(加入)您拥有的两个数据集:
library(sqldf)
merged_data <- sqldf("select a.country, b.population from df1 as a
left join df2 as b on (a.country = b.country) group by 1")
谢谢你,快乐的R-programming !!!
答案 1 :(得分:0)
要显示其他数据集中没有匹配的第一个数据集行,您只需添加https://cloud.seafile.com/u/d/98233edf89/
选项,如下所示(有关详细信息,请查看the documentation):
all.x=T
这些行随后会在第二个数据集列中显示total <- merge(map,Co2_2x, by="NAME",all.x=T)
。
如果匹配似乎不起作用,您可能需要确保匹配变量(在您的情况下为NA
)在两个数据集中以相同的方式填充(字母大小写,可能的空格)在四肢...)。
This answer提供了一种很好的方法。