2012-03-07 29 views
39

Tôi có một cột dữ liệu là một yếu tố với các mức A, B và C, tôi quan tâm đến việc kết hợp hai mức này thành một yếu tố, vì vậy nó sẽ trở thành A và B, với B = B và C, hoặc có thể là biến A và D mới, với D = B và C. Tôi có thể tìm ra nhiều cách để làm điều này bằng cách lặp qua cột với câu lệnh if, nhưng tôi cảm thấy có một cách tiếp cận thanh lịch hơn và tôi đã tự hỏi nếu có ai đó có thể chỉ cho tôi đi đúng hướng.Nhóm 2 mức của một nhân tố trong R

+3

Gần đây, câu trả lời tốt hơn: http://stackoverflow.com/questions/19410108/cleaning-up-factor- mức độ thu hẹp-nhiều cấp-nhãn –

Trả lời

70

Sử dụng levels(x) <- ... để chỉ định cấp mới và kết hợp một số cấp trước đó. Ví dụ:

f <- factor(LETTERS[c(1:3, 3:1)]) 
f 
[1] A B C C B A 
Levels: A B C 

Bây giờ kết hợp "A" và "B" vào một cấp độ duy nhất:

levels(f) <- c("A", "A", "C") 
f 
[1] A A C C A A 
Levels: A C 
+0

Đơn giản như tôi có thể hy vọng, cảm ơn bạn! – asjohnson

+0

Điều này rất hữu ích, cảm ơn cả hai. – Rhubarb

+0

Có cách nào để thực hiện điều này trong dplyr không? – Hatshepsut

9

Nếu bạn đang sử dụng dplyr ống bạn có thể sử dụng gói forcats.

library(forcats) 
f %>% fct_collapse(A = c("A","B")) 

#[1] A A C C A A 
#Levels: A C 
2

Thư viện rockchalk có thể kết hợp các cấp. Tôi nghĩ tuyệt vời của nó, nếu bạn muốn kết hợp B và C với nhau trong một yếu tố làm điều này:

library(rockchalk) 
combineLevels(mydf$facVar,levs = c("B", "C"), newLabel = c("BandC")) 
Các vấn đề liên quan