在R中有效地将多个变量从字符重新编码为数值

时间:2016-03-31 14:56:49

标签: r r-car recode

我使用R(版本3.2.3)从字符值重新编码多个变量(在同一数据帧中)("高","中","低&& #34;和#34;没关注")数值(4,3,2和1)。我知道有几种方法可以重新编码变量,在下面的例子中我一直在使用" recode"功能在汽车包装。这在重新编码单个变量时工作正常,但是当我指定多个变量(第45到68列)时,所有值都替换为" N / A"。

df[,c(45:68)] <- recode(df[,c(45:68)],"'High'=4;'Medium'=3;'Low'=2;'No Concerns'=1",as.numeric.result=TRUE)

我很感激我在这里可能出错的地方。我是编码社区的新手,所以如果我在问题中提供了足够的详细信息,请告诉我。

3 个答案:

答案 0 :(得分:3)

尝试以下方法:

java.lang.NoClassDefFoundError: edu/stanford/nlp/pipeline/StanfordCoreNLP

这里发生的是您将各列传递给df[,c(45:68)] <- lapply(df[,c(45:68)], function(x) recode(x,"'High'=4; 'Medium'=3; 'Low'=2; 'No Concerns'=1", as.numeric.result=TRUE)) 。查看recode的帮助文件,您会看到函数需要数字向量,字符向量或因子作为输入。但是,在您的代码中,您提供了一个列表。上面的代码提供了重新编码的单个列,这应该可以工作。当然,如果没有适当的示例数据,很难说,但试一试。

答案 1 :(得分:0)

具有 dplyr hablar 的解决方案:

library(dplyr)
library(hablar)

df <- df %>% 
  mutate_at(vars(45:68),
            funs(case_when(x == 'High'        ~ 4,
                           x == 'Medium'      ~ 3,
                           x == 'Low'         ~ 2;
                           x == 'No Concerns' ~ 1))) %>% 
  convert(num(x))

答案 2 :(得分:0)

这对我来说效果更好,尤其是因为recode命令对公式更敏感:

items<-c("a","b","c")

df[items] <- lapply(df[items], function(x) ifelse(x=="STRONGLY AGREE", 6,
  ifelse(x=="AGREE", 5,
  ifelse(x=="SLIGHTLY AGREE", 4,
  ifelse(x=="SLIGHTLY DISAGREE", 3,
  ifelse(x=="DISAGREE", 2,
  ifelse(x=="STRONGLY DISAGREE", 1,0)))))))