我想使用以下定义的中断来剪切数据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]
Run Code Online (Sandbox Code Playgroud)
但是,我也想获得水平(minimum:-2]和(7:maximum].在recode()汽车包装的功能中,可以使用"lo:".是否有类似的东西可用于切割?
x <- -10:10
cut(x, c(-Inf, -2, 4, 6, 7, +Inf))
# Levels: (-Inf,-2] (-2,4] (4,6] (6,7] (7, Inf]
Run Code Online (Sandbox Code Playgroud)
小智 6
您可以使用min()和max()评估间隔范围(如Gavin所述)并设置include.lowest = TRUE为确保最小值(此处为-10)是间隔的一部分.
输入:
x = c(-10:10)
cut(x, c(min(x),-2,4,6,7,max(x)), include.lowest = TRUE)
Run Code Online (Sandbox Code Playgroud)
输出:
[1] [-10,-2] [-10,-2] [-10,-2] [-10,-2] [-10,-2] [-10,-2] [-10,-2] [-10,-2] [-10,-2] (-2,4]
[11] (-2,4] (-2,4] (-2,4] (-2,4] (-2,4] (4,6] (4,6] (6,7] (7,10] (7,10]
[21] (7,10]
Levels: [-10,-2] (-2,4] (4,6] (6,7] (7,10]
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)