6

で定義されたブレークを使用してデータをカットしたいcut():

x = c(-10:10)

cut(x, c(-2,4,6,7))

[1] <NA>   <NA>   <NA>   <NA>   <NA>   <NA>   <NA>   <NA>   <NA>   (-2,4] (-2,4] (-2,4] (-2,4] (-2,4] (-2,4] (4,6]  (4,6]  (6,7]  <NA>   <NA>  
[21] <NA>  
Levels: (-2,4] (4,6] (6,7]

(minimum:-2]ただし、レベルとも取得したい(7:maximum]。car-packageの関数recode()では、「lo:」を使用できます。似たようなカット品はありますか?

4

6 に答える 6

9
x <- -10:10

cut(x, c(-Inf, -2, 4, 6, 7, +Inf))

# Levels: (-Inf,-2] (-2,4] (4,6] (6,7] (7, Inf]
于 2012-09-03T09:29:59.860 に答える
6

findIntervalが答えです。

i <- findInterval(x, c(-2,4,6,7))

cbind(x, i)

        x i
 [1,] -10 0
 [2,]  -9 0
 [3,]  -8 0
 [4,]  -7 0
 [5,]  -6 0
 [6,]  -5 0
 [7,]  -4 0
 [8,]  -3 0
 [9,]  -2 1
[10,]  -1 1
[11,]   0 1
[12,]   1 1
[13,]   2 1
[14,]   3 1
[15,]   4 2
[16,]   5 2
[17,]   6 3
[18,]   7 4
[19,]   8 4
[20,]   9 4
[21,]  10 4
于 2012-09-03T13:35:08.417 に答える
2

Inf& beforeでパディングするのに問題が発生した-Infため (正確には、この時間に私を逃れる理由はあります)、より安全な解決策は、適切に拡張された最小値と最大値でパディングすることです。

x <- c(-10:10)
cut(x, c(min(x) -1 , -2, 4, 6, 7, max(x) + 1))

R> x <- c(-10:10)
R> cut(x, c(min(x) -1 , -2, 4, 6, 7, max(x) + 1))
 [1] (-11,-2] (-11,-2] (-11,-2] (-11,-2] (-11,-2] (-11,-2] (-11,-2] (-11,-2]
 [9] (-11,-2] (-2,4]   (-2,4]   (-2,4]   (-2,4]   (-2,4]   (-2,4]   (4,6]   
[17] (4,6]    (6,7]    (7,11]   (7,11]   (7,11]  
Levels: (-11,-2] (-2,4] (4,6] (6,7] (7,11]

ただし、ほとんどの場合、Sven の Answer/solution で十分です。

于 2012-09-03T09:45:59.100 に答える
0

(私の)santokuパッケージは、必要に応じてブレークを自動的に拡張します:

library(santoku)
x <- c(-10:10)

chop(x, c(-2, 4, 6, 7))

##  [1] [-10, -2) [-10, -2) [-10, -2) [-10, -2) [-10, -2) [-10, -2) [-10, -2) [-10, -2) [-2, 4)  
## [10] [-2, 4)   [-2, 4)   [-2, 4)   [-2, 4)   [-2, 4)   [4, 6)    [4, 6)    [6, 7)    [7, 10]  
## [19] [7, 10]   [7, 10]   [7, 10]  
## Levels: [-10, -2) [-2, 4) [4, 6) [6, 7) [7, 10]

extendへの引数を使用して、この動作を制御できますchop()

于 2021-04-28T11:38:36.537 に答える