我有一个数据框(df),列出与每个站点关联的国家/地区
Site Country
Site1 USA
Site2 Vietnam
Site3 Spain
Site4 Germany
Site5 China
Run Code Online (Sandbox Code Playgroud)
我想附上一个专栏,我将每个国家与其相应的大陆联系起来.我写了一个简单if loop的做法:
df$Continent <- NA
if(df$Country == "USA" |df$Country == "Canada" |df$Country == "Mexico")
{df$Continent <- "North America"}
if(df$Country == "Spain" |df$Country == "France" |df$Country == "Germany")
{df$Continent <- "Europe"}
## .. etc
summary(df)
Run Code Online (Sandbox Code Playgroud)
但是,每当我运行df时,我发现它将北美分配给所有国家.我知道这可能听起来很微不足道,但是如果我if在任何地方使用法规而不是else或者它会有所不同if else吗?有任何纠正这个的建议吗?
merge()使用数据构建查找表及其.
例如:
lookup <- data.frame(Country = c("USA", "Canada", "Mexico",
"Spain", "France", "Germany",
"Vietnam", "China"),
Continent = rep(c("North America", "Europe", "Asia"),
times = c(3,3,2)))
Run Code Online (Sandbox Code Playgroud)
使用您的数据片段作为数据框df,我们可以添加Continentvia merge()(数据库术语中的连接):
> merge(df, lookup, sort = FALSE, all.x = TRUE)
Country Site Continent
1 USA Site1 North America
2 Vietnam Site2 Asia
3 Spain Site3 Europe
4 Germany Site4 Europe
5 China Site5 Asia
Run Code Online (Sandbox Code Playgroud)