【问题标题】:Collapsing factors across multiple columns of a dataframe using the "levels" statement使用“级别”语句跨数据框的多列折叠因子
【发布时间】:2016-03-05 07:00:34
【问题描述】:

关于使用“级别”跨数据框列折叠因子的快速问题。下面是基本数据框的代码。

Service<-c("AS","AS","PS","PS","RS","RS","ES","ES")
 Year<-c("2015","2016","2015","2016","2015","2016","2015","2016")
 Q1<-c("Dissatisfied","Satisfied","Satisfied","Neutral","Dissatisfied","Dissatisfied","Satisfied","Neutral")
Q2<-c("Dissatisfied","Neutral","Satisfied","Dissatisfied","Dissatisfied","Neutral","Satisfied","Satisfied")
Example<-data.frame(Service,Year,Q1,Q2)

我可以使用以下代码通过结合“满意”和“中立”来轻松折叠关卡。

levels(Example$Q1)<-c("Dissatisfied","Satisfied","Satisfied")

但是,我如何在相似的列中同时执行此操作,比如 Q1 列和 Q2 列?我知道有一种使用 lapply 或 apply 的简单方法,但我似乎无法让它工作。

【问题讨论】:

    标签: r


    【解决方案1】:

    我认为你的手术是不可能的。我想我记得以这种方式折叠因子级别已被严重弃用,以至于它会引发错误,但由于它适用于一列,它应该(并且确实)适用于多列。

     Example[3:4] <- lapply(Example[3:4], 'levels<-', c("Dissatisfied","Satisfied","Satisfied") )
     Example
      Service Year           Q1           Q2
    1      AS 2015 Dissatisfied Dissatisfied
    2      AS 2016    Satisfied    Satisfied
    3      PS 2015    Satisfied    Satisfied
    4      PS 2016    Satisfied Dissatisfied
    5      RS 2015 Dissatisfied Dissatisfied
    6      RS 2016 Dissatisfied    Satisfied
    7      ES 2015    Satisfied    Satisfied
    8      ES 2016    Satisfied    Satisfied
    

    【讨论】:

    • 感谢您的回答。快速提问,为什么代码需要在 'levels
    【解决方案2】:

    我们可以使用lapply。创建要子集化的列的索引。在这里,它是以“Q”开头后跟数字(^Q\\d+)的列名。使用grep 获取索引,然后在这些列上使用lapply 并使用library(car) 中的recode 更改levels

    nm1 <- grep("^Q\\d+", names(Example))
    Example[nm1] <-  lapply(Example[nm1], recode, 
             'c("Satisified", "Neutral")= "Satisfied"')
    

    由于我们只是将“中性”更改为“满意”,而“满意”应该保持不变,我们也可以这样做

    Example[nm1] <- lapply(Example[nm1], recode, '"Neutral"= "Satisfied"')
    

    【讨论】:

      猜你喜欢
      • 2013-10-24
      • 2016-12-11
      • 2020-02-21
      • 2016-06-07
      • 2014-02-11
      • 1970-01-01
      • 1970-01-01
      • 2022-01-20
      • 2015-08-07
      相关资源
      最近更新 更多