Как преобразовать данные дискретного отношения в порядковые данные в R? - PullRequest
5 голосов
/ 19 октября 2011

Вот пример:

   height
1  1.5
2  1.3 
3  1.9 
4  1.5
5  1.6 

Есть 1000 из них с ростом от 0 до 1,9. И я хочу разделить их на 3 уровня: низкий, средний и высокий. Тогда они являются порядковыми данными.

результат должен выглядеть следующим образом:

   height
1  medium
2  low
3  high
4  medium
5  medium

И резюме должно выглядеть так:

        height
low:    203
medium: 723
high:   74

Я пытался использовать цикл, но тогда «низкий, средний и высокий» - это символы, а не уровни. Вот как я сделал нижнюю часть:

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
    }
  }
}

Ответы [ 3 ]

3 голосов
/ 19 октября 2011
cut(height, quantile(height, prob=c(203, 723, 74)/1000 ), labels=c("low", "medium", "high") )
2 голосов
/ 19 октября 2011

cut будет достаточно удобно вырезать ваши данные.

# 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: интервалы будут составлять <= 1,5, <= 1,9. Если вы хотите, чтобы интервалы были <1,5, <1,9, укажите <code>right=FALSE:

hcut <- cut(height, height_cuts, right=FALSE, ...)
1 голос
/ 19 октября 2011

Использование cut:

cut(x$height, c(0,1.5,1.9,10), labels=c("low","med","high"), right=FALSE)
# [1] med  low  high med  med
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...