2017-07-16 52 views
2

我试图重新编码一个由公认的国家组成的变量到我指定的区域。我试图使用dplyr将国家变量重新编码为区域来做多个if_else声明,但它变得非常可笑。做150多个国家重新编码的更好方法?

我想通过几个国家在矢量使用循环来和值更改为新的东西,在下面的例子中,我想改变值df$country匹配i这一点,将其更改为"Europe"。这是我开发的代码,似乎并不想工作。有一个更好的方法吗?

df <- data.frame(country =c("Netherlands", "US", "Canada", "Frace", "Italy"), 
     ID=1:100) 
i <- c("Netherlands", "France", "Italy") 
n <- length(i) 

for (i in n){ 
df$country[(df$country == i)] <- "Europe" 
} 

根据我如何更改格式,我得到了几个不同的错误。看来没有什么可行的。

回答

2

随着“国家”是factor,我们可以将“国家”是%in%levels“我”为“欧洲”,而不是使用for循环

levels(df$country)[levels(df$country) %in% i] <- "Europe" 
+0

哇,这似乎工作的非常完美。如果我理解正确,你的代码是: 1.要求df $ country的等级; 2.索引与我匹配的因子水平; 3.将比赛改为“欧洲”。 你能解释%管道中的%吗?我在网上查了好几遍,但找不到一个好的概述。 – elliot

+0

@elliot如果有多个元素匹配,则可以使用'%in%'来返回逻辑向量。 '%level(df $ country)%in%i'返回一个逻辑向量,即TRUE/FALSE,我们根据该逻辑向量对'levels(df $ country)'进行子集分配,并将其分配给'Europe' – akrun

+1

感谢!我几个月来一直在努力克服这个问题。祝福你。 – elliot