2

我正在使用 R(版本 3.2.3)将多个变量(在同一数据帧中)从字符值(“高”、“中”、“低”和“无关注”)重新编码为数值(4、3、2和 1)。我知道有几种重新编码变量的方法,在下面的示例中,我一直在使用 car 包中的“重新编码”功能。这在重新编码单个变量时效果很好,但是当我指定多个变量(第 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)

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

4

3 回答 3

3

尝试以下操作:

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. 查看 的帮助文件recode,您会看到该函数需要一个数字向量、字符向量或一个因子作为输入。但是,在您的代码中,您提供了一个列表。上面的代码提供了单独的列来重新编码,这应该可以工作。当然,如果没有适当的示例数据,很难分辨,但不妨试一试。

于 2016-03-31T15:03:36.300 回答
2

使用dplyrhablar的解决方案:

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))
于 2018-10-31T15:22:58.783 回答
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))))))) 
于 2020-02-06T20:30:34.713 回答