[英]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.