2012-11-28 38 views
25

thể trùng lặp:
identifying or coding unique factors using RChuyển đổi biến các yếu tố trong R

Tôi đang gặp một số rắc rối với R.

Tôi có một tập dữ liệu tương tự như sau, nhưng lâu hơn nữa.

A B Pulse 
1 2 23 
2 2 24 
2 2 12 
2 3 25 
1 1 65 
1 3 45 

Về cơ bản, 2 cột đầu tiên được mã hóa. A có 1, 2 đại diện cho 2 trọng số khác nhau. B có 1, 2, 3 đại diện cho 3 lần khác nhau.

Khi chúng được mã hóa giá trị bằng số, R sẽ coi chúng là biến số. Tôi cần sử dụng hàm yếu tố để chuyển đổi các biến này thành các yếu tố.

Trợ giúp?

+0

Bạn có thể chỉ định dấu kiểm nếu điều này trả lời câu hỏi của bạn. –

Trả lời

38

Dưới đây là một ví dụ:

#Create a data frame 
> d<- data.frame(a=1:3, b=2:4) 
> d 
    a b 
1 1 2 
2 2 3 
3 3 4 

#currently, there are no levels in the `a` column, since it's numeric as you point out. 
> levels(d$a) 
NULL 

#Convert that column to a factor 
> d$a <- factor(d$a) 
> d 
    a b 
1 1 2 
2 2 3 
3 3 4 

#Now it has levels. 
> levels(d$a) 
[1] "1" "2" "3" 

Bạn cũng có thể xử lý này khi đọc trong dữ liệu của bạn. Xem thông số colClassesstringsAsFactors trong ví dụ: readCSV().

Lưu ý rằng, tính toán, tính toán các cột như vậy sẽ không giúp bạn nhiều và có thể thực sự làm chậm chương trình của bạn (mặc dù không đáng kể). Sử dụng một yếu tố sẽ yêu cầu tất cả các giá trị được ánh xạ tới ID đằng sau hậu trường, vì vậy bất kỳ bản in nào của data.frame đều yêu cầu tra cứu các cấp đó - một bước bổ sung cần có thời gian.

Các yếu tố thật tuyệt vời khi lưu trữ các chuỗi mà bạn không muốn lưu trữ nhiều lần, nhưng thay vì tham chiếu bằng ID của chúng. Xem xét việc lưu trữ một tên thân thiện hơn trong các cột như vậy để được hưởng lợi đầy đủ từ các yếu tố.

+0

Nhưng mỗi số đại diện cho một cái gì đó. Đối với A, 1 đại diện cho dài, và 2 đại diện cho ngắn. Đối với B, 1 2 3 đại diện, 1kg, 2kg, 3kg Vì vậy, tôi cần phải chuyển đổi tất cả những người 1, 2 vv vào 1kg, 2kg, dài, ngắn, vv Tôi cần phải thêm nhãn cho họ. – math11

+2

Hãy thử chạy mã ở trên theo sau bằng cách gán giá trị 'cấp' cho một cái gì đó hữu ích hơn. Ví dụ, 'cấp độ (d $ a) <- c (" Long "," Ngắn ")'. Bây giờ bạn (hoặc một người dùng mới nhìn vào mã của bạn) không cần phải lo lắng về việc ghi nhớ các ánh xạ giữa các ID và các nhãn của bạn. R sẽ xử lý ánh xạ cho bạn và chỉ trình bày các nhãn cho bạn. –

19

dữ liệu mẫu

myData <- data.frame(A=rep(1:2, 3), B=rep(1:3, 2), Pulse=20:25) 



myData$A <-as.factor(myData$A) 
myData$B <-as.factor(myData$B) 

hoặc bạn có thể chọn các cột của bạn hoàn toàn và quấn nó lên độc đáo:

# select columns 
cols <- c("A", "B") 
myData[,cols] <- data.frame(apply(myData[cols], 2, as.factor)) 

levels(myData$A) <- c("long", "short") 
levels(myData$B) <- c("1kg", "2kg", "3kg") 

ví dụ:

> myData 
     A B Pulse 
1 long 1kg 20 
2 short 2kg 21 
3 long 3kg 22 
4 short 1kg 23 
5 long 2kg 24 
6 short 3kg 25 
Các vấn đề liên quan