Использование функции R cut - как работают параметры разрыва и меток - PullRequest
0 голосов
/ 23 июня 2019

Я искал четкое объяснение «метки создаются с использованием« (a, b] «интервальной нотации») - как описано в cut help file , который казалсяне иметь объяснения.

1 Ответ

3 голосов
/ 23 июня 2019

Итак, я протестировал разрез на следующих простых примерах:

df <- data.frame(c(1,2,3,4,5,6,7,99))
names(df) <- 'x'
df$cut <- cut(df[ ,1], breaks = c(2,4,6,8), right = TRUE)
df
       x cut
#      1  <NA>
#      2  <NA>
#      3 (2,4]
#      4 (2,4]
#      5 (4,6]
#      6 (4,6]
#      7 (6,8]
#     99  <NA>

Таким образом, «(» означает x> разрыв слева, а «[» означает <= (следующий) разрыв справа, и если значение ниже, чем самый низкий разрыв, оно помечается как NA, аналогично, если значение превышает самый высокий разрыв также помечен как NA. </p>

Следующее тестирование опции include.lowest = TRUE

df$cut <- cut(df[ ,1], breaks = c(2,4,6,8), right = TRUE, include.lowest = TRUE)
df
  x   cut
# 1  <NA>
# 2 [2,4]
# 3 [2,4]
# 4 [2,4]
# 5 (4,6]
# 6 (4,6]
# 7 (6,8]

Так что здесь для первого бина между первыми двумя перерывами, '[' слева означает> = (первый разрыв), а ']' означает <= (второй) разрыв. Последующие перерывы обрабатываются как указано выше. </p>

Далее к значениям NA можно обратиться, используя -Inf и / или + Inf в следующих разделах:

df$cut <- cut(df[ ,1], breaks = c(-Inf,2,4,6,8,+Inf), right = TRUE, include.lowest = TRUE)
df

   x      cut
#  1 [-Inf,2]
#  2 [-Inf,2]
#  3    (2,4]
#  4    (2,4]
#  5    (4,6]
#  6    (4,6]
#  7    (6,8]
# 99 (8, Inf]

Установка правильной опции = FALSE меняет смысл пороговых значений, как показано в следующем примере:

df$cut <- cut(df[ ,1], breaks = c(-Inf,2,4,6,8,+Inf), right = FALSE)
df
#   x      cut
#  1 [-Inf,2)
#  2    [2,4)
#  3    [2,4)
#  4    [4,6)
#  5    [4,6)
#  6    [6,8)
#  7    [6,8)
# 99    [8, Inf)

Наконец, опция меток позволяет использовать произвольные имена для порогов, если вы этого хотите ...

lbls <- c('x<=2','2<x<=4','4<x<=6','6<x<=8','x>8')
df$cut <- cut(df[ ,1], breaks = c(-Inf,2,4,6,8,+Inf), right = TRUE, include.lowest = TRUE, labels = lbls)
df
   x    cut
#  1   x<=2
#  2   x<=2
#  3 2<x<=4
#  4 2<x<=4
#  5 4<x<=6
#  6 4<x<=6
#  7 6<x<=8
# 99    x>8
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...