我使用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)
我很感激我在这里可能出错的地方。我是编码社区的新手,所以如果我在问题中提供了足够的详细信息,请告诉我。
答案 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)))))))