簡體   English   中英

使用“ levels”語句跨數據框的多個列折疊因子

[英]Collapsing factors across multiple columns of a dataframe using the “levels” statement

有關使用“級別”在數據框的各個列中折疊因子的快速問題。 以下是基本數據框的代碼。

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的簡單方法,但是我似乎無法使其正常工作。

我認為您無法進行手術。 我以為我記得這種折舊因子級別已被嚴重棄用,以至於會引發錯誤,但是由於它適用於一列,因此它應該(也確實)適用於多列。

 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

我們可以使用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"')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM