Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 一种更好的方法来进行150多个国家/地区的重新编码?_R_If Statement_Indexing_Dplyr_Recode - Fatal编程技术网

R 一种更好的方法来进行150多个国家/地区的重新编码?

R 一种更好的方法来进行150多个国家/地区的重新编码?,r,if-statement,indexing,dplyr,recode,R,If Statement,Indexing,Dplyr,Recode,我试图将一个由公认国家组成的变量重新编码为我指定的区域。我曾尝试使用dplyr对多个if_else语句进行编码,将国家变量重新编码到区域中,但它的长度变得不可思议 我想使用for loop在向量中循环几个国家,并将值更改为新值,在下面的示例中,我想更改df$country中匹配I的值,并将其更改为“Europe”。这是我开发的代码,它似乎不想工作。有更好的方法吗 df <- data.frame(country =c("Netherlands", "US", "Canada", "Frac

我试图将一个由公认国家组成的变量重新编码为我指定的区域。我曾尝试使用
dplyr
对多个
if_else
语句进行编码,将国家变量重新编码到区域中,但它的长度变得不可思议

我想使用for loop在向量中循环几个国家,并将值更改为新值,在下面的示例中,我想更改
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"
}

df由于“国家”是
因子
,我们可以将%
'i'中
%的“国家”的
级别
分配给“欧洲”,而不是使用
作为
循环

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

levels(df$country)[levels(df$country)%in%i]哇,这似乎非常有效。如果我理解正确,您的代码是:1。要求国家提供df$的水平;2.索引匹配i的因子水平;3.将比赛改为“欧洲”。你能解释一下管道中的%吗?我在网上找了好几次,但找不到一个好的概述。@elliot如果有多个元素要匹配,可以使用%
中的
%返回逻辑向量<代码>级别(df$country)%in%i
返回一个逻辑向量,即TRUE/FALSE,我们根据该逻辑向量对
级别(df$country)
进行子集划分,并将其分配给“Europe”,谢谢!几个月来,我一直在努力克服这个问题。祝福你。@akrun我相信OP的意思是
for(j in seq\u-along(I))
然后在循环中使用
I[j]
。至少这是有意义的。我通过一个参考表解决了类似的问题,在你的情况下,这个df将有(1)个国家和(2)个地区。然后,我将引用表与我试图分类的DF合并。它简化了我的编码。