2017-07-16 48 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

相關問題