【问题标题】:Efficiently recoding multiple variables from character to numeric values in R在 R 中有效地将多个变量从字符重新编码为数值
【发布时间】:2016-03-31 14:56:49
【问题描述】:

我正在使用 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)

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

【问题讨论】:

  • 欢迎来到 StackOverflow!关于在您的问题中提供足够的详细信息:请阅读有关how to ask a good question 的信息以及如何提供reproducible example。这将使其他人更容易帮助您。
  • 也许只使用data.matrix:例如as.data.frame(Titanic)data.matrix(as.data.frame(Titanic)).
  • Procrastinatus Maximus - 感谢您提出一个好问题并提供可行示例的建议。

标签: r r-car recode


【解决方案1】:

尝试以下方法:

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

【讨论】:

    【解决方案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))
    

    【讨论】:

      【解决方案3】:

      这对我来说效果更好,特别是因为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))))))) 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-11-12
        • 1970-01-01
        • 1970-01-01
        • 2015-06-28
        • 1970-01-01
        • 2016-11-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多