В R, Cut дает неравные интервалы для диапазонов от 1 до 9 и от 0,1 до 0,9 - PullRequest
0 голосов
/ 22 февраля 2019

В следующем примере

@ почему интервал от 1 до 9 сокращается до 0, 3, 6, 9,
@, а интервал от 0,1 до0,9 обрезается при 0,1, 0,2, 0,6 и 0,9 @, даже если снижение в обеих ситуациях аналогично?почему?
--- см. вывод

 cbind(
      seq(      from = 1, to = 9, by = 1 ), 
      cut( seq( from = 1, to = 9, by = 1),         breaks = c( 0, 3, 6, 9 ),   include.lowest = TRUE ),
      seq(      from = 0.1, to = 0.9, by = 0.1 ), 
      cut( seq( from = 0.1, to = 0.9, by = 0.1),   breaks = c( 0, 0.3, 0.6, 0.9 ),   include.lowest = TRUE ),
      seq(      from = 0.01, to = 0.09, by = 0.01 ), 
      cut( seq( from = 0.01, to = 0.09, by = 0.01),   breaks = c( 0, 0.03, 0.06, 0.09 ),   include.lowest = TRUE )
      )

Вывод:

  [,1] [,2] [,3] [,4] [,5] [,6]
 [1,]    1    1  0.1    1 0.01    1
 [2,]    2    1  0.2    1 0.02    1
 [3,]    3    1  0.3    2 0.03    1
 [4,]    4    2  0.4    2 0.04    2
 [5,]    5    2  0.5    2 0.05    2
 [6,]    6    2  0.6    2 0.06    3
 [7,]    7    3  0.7    3 0.07    3
 [8,]    8    3  0.8    3 0.08    3
 [9,]    9    3  0.9    3 0.09    3

1 Ответ

0 голосов
/ 22 февраля 2019

@ Проблема была изложена [здесь] [1], спасибо @Joran.@ Я нашел решение для неравных интервалов резки.@ Я использовал функцию округления в R. Установив параметр на 2 цифры, проблема не решилась.

options(digits = 2)
cbind(
  seq(      from = 1, to = 9, by = 1 ), 
  cut( seq( from = 1, to = 9, by = 1),          c( 0, 3, 6, 9 ) ),
  seq(      from = 0.1, to = 0.9, by = 0.1 ), 
  cut( seq( from = 0.1, to = 0.9, by = 0.1),    c( 0, 0.3, 0.6, 0.9 )),
  seq(      from = 0.01, to = 0.09, by = 0.01 ), 
  cut( seq( from = 0.01, to = 0.09, by = 0.01),    c( 0, 0.03, 0.06, 0.09 ))
)

вывод неравных интервалов обрезки на основе параметров (цифры = 2):

  [,1] [,2] [,3] [,4] [,5] [,6]
 [1,]    1    1  0.1    1 0.01    1
 [2,]    2    1  0.2    1 0.02    1
 [3,]    3    1  0.3    2 0.03    1
 [4,]    4    2  0.4    2 0.04    2
 [5,]    5    2  0.5    2 0.05    2
 [6,]    6    2  0.6    2 0.06    3
 [7,]    7    3  0.7    3 0.07    3
 [8,]    8    3  0.8    3 0.08    3
 [9,]    9    3  0.9    3 0.09    3


options(digits = 200)
cbind(
  seq(      from = 1, to = 9, by = 1 ), 
  cut( round(seq( from = 1, to = 9, by = 1), 2),          c( 0, 3, 6, 9 ) ),
  seq(      from = 0.1, to = 0.9, by = 0.1 ), 
  cut( round(seq( from = 0.1, to = 0.9, by = 0.1), 2),    c( 0, 0.3, 0.6, 0.9 )),
  seq(      from = 0.01, to = 0.09, by = 0.01 ), 
  cut( round(seq( from = 0.01, to = 0.09, by = 0.01), 2),    c( 0, 0.03, 0.06, 0.09 ))
)

вывод равных интервалов среза на основе функции округления:

      [,1] [,2] [,3] [,4] [,5] [,6]
 [1,]    1    1  0.1    1 0.01    1
 [2,]    2    1  0.2    1 0.02    1
 [3,]    3    1  0.3    1 0.03    1
 [4,]    4    2  0.4    2 0.04    2
 [5,]    5    2  0.5    2 0.05    2
 [6,]    6    2  0.6    2 0.06    2
 [7,]    7    3  0.7    3 0.07    3
 [8,]    8    3  0.8    3 0.08    3
 [9,]    9    3  0.9    3 0.09    3
...