2011-10-19 36 views
5

Dưới đây là một ví dụ:Làm thế nào để thay đổi dữ liệu tỷ lệ rời rạc thành dữ liệu thứ tự trong R?

height 
1 1.5 
2 1.3 
3 1.9 
4 1.5 
5 1.6 

Có 1.000 trong số họ với chiều cao khác nhau, 0-1,9. Và tôi muốn cắt chúng thành 3 cấp độ: thấp, trung bình và cao. Sau đó, chúng là dữ liệu thứ tự.

kết quả sẽ giống như thế này:

height 
1 medium 
2 low 
3 high 
4 medium 
5 medium 

Và tóm tắt nên hình như:

 height 
low: 203 
medium: 723 
high: 74 

tôi cố gắng sử dụng các vòng lặp nhưng sau đó "thấp, trung bình và cao" là ký tự, không cấp độ. Sau đây là cách tôi đã làm phần thấp:

height_cuts = c(1.5,1.9) 
for(i in 1:nrow(health.sample)){ 
    if(is.na(health.sample$height[i])==FALSE){ 
    if(health.sample$height[i] < height_cuts[1]){ 
     health.sample$height[i] = low_h 
    } 
    } 
} 
+0

Bạn chưa cho biết điều quan trọng nhất - LÀM THẾ NÀO các loại này cần được xác định – TMS

Trả lời

3
cut(height, quantile(height, prob=c(203, 723, 74)/1000), labels=c("low", "medium", "high")) 
+0

+1 để sử dụng ví dụ tóm tắt của OP làm thay thế cho thông tin quan trọng nhất, mà OP bị bỏ qua trong câu hỏi :-) – TMS

2

cut sẽ, thuận tiện đủ, cắt dữ liệu của bạn.

# cut needs all endpoints explicitly specified, including outside bounds 
height_cuts <- c(-Inf, 1.5, 1.9, Inf) 

hcut <- cut(height, height_cuts, labels=c("low", "medium", "high")) 

ETA: điều này sẽ làm cho chu kỳ dựa trên < = 1,5, < = 1,9. Nếu bạn muốn các khoảng được < 1.5, < 1.9, định right=FALSE:

hcut <- cut(height, height_cuts, right=FALSE, ...) 
1

Sử dụng cut:

cut(x$height, c(0,1.5,1.9,10), labels=c("low","med","high"), right=FALSE) 
# [1] med low high med med 
Các vấn đề liên quan