我有一个从0到20的数字序列,想要将它们转换成固定的间隔。我现在在R中有以下代码:
set.seed(21)
x<-sample(0:20, 100, replace=TRUE)
c1<-cut(x,seq(0, 20, by = 5))
table(c1)
这给了我
c1
(0,5] (5,10] (10,15] (15,20]
24 12 29 32
我不需要频率。 x的限制和应转换为的相应间隔如下:
谢谢!
答案 0 :(得分:1)
您可以遍历每个值,并检查与任何间隔值c(0, 5, 10, 15)
的绝对差是否小于2.5:
ivl <- c(0, 5, 10, 15)
sapply(x, function(y) ifelse(y > 17.5, 0, ivl[abs(y - ivl) < 2.5]))
另一个选择是使用比较器。您可以为此使用基数R的ifelse
,但是dplyr::case_when
会更简洁一些:
dplyr::case_when(x < 2.5 | x > 17.5 ~ 0,
x > 2.5 & x < 7.5 ~ 5,
x > 7.5 & x < 12.5 ~ 10,
x > 12.5 & x < 17.5 ~ 15)
在两种情况下,您最终都具有以下向量:
[1] 0 0 10 15 15 0 10 0 5 10 5 5 5 0 0 10 15 10 15 0 10 5 5 10 5 15 0 0 15 0
[31] 15 0 10 10 0 15 5 5 5 10 10 0 0 15 5 5 5 5 10 10 15 10 10 15 5 0 10 0 5 0
[61] 0 10 10 0 10 0 5 0 15 5 15 15 10 5 15 0 5 5 0 5 5 0 15 5 5 10 5 15 0 10
[91] 10 0 15 15 0 15 0 10 5 5
答案 1 :(得分:0)
以防万一,您正在寻找此间隔
[0,2.5] (2.5,7.5] (7.5,12.5] (12.5,17.5] (17.5,20]
这尚不清楚,因为您需要17.5-2.5之间的一个间隔,
这是cut
和相应的频率表的结果。
set.seed(21)
x<-sample(0:20, 100, replace=TRUE)
# c1<-cut(x, seq(0, 20, by = 5))
cut(x, breaks=c(0, 2.5, 7.5, 12.5, 17.5, 20), include.lowest=TRUE)
#> [1] [0,2.5] [0,2.5] (7.5,12.5] (12.5,17.5] (12.5,17.5] (17.5,20]
#> [7] (7.5,12.5] (17.5,20] (2.5,7.5] (7.5,12.5] (2.5,7.5] (2.5,7.5]
#> [13] (2.5,7.5] [0,2.5] [0,2.5] (7.5,12.5] (12.5,17.5] (7.5,12.5]
#> [19] (12.5,17.5] [0,2.5] (7.5,12.5] (2.5,7.5] (2.5,7.5] (7.5,12.5]
#> [25] (2.5,7.5] (12.5,17.5] [0,2.5] [0,2.5] (12.5,17.5] [0,2.5]
#> [31] (12.5,17.5] [0,2.5] (7.5,12.5] (7.5,12.5] (17.5,20] (12.5,17.5]
#> [37] (2.5,7.5] (2.5,7.5] (2.5,7.5] (7.5,12.5] (7.5,12.5] [0,2.5]
#> [43] (17.5,20] (12.5,17.5] (2.5,7.5] (2.5,7.5] (2.5,7.5] (2.5,7.5]
#> [49] (7.5,12.5] (7.5,12.5] (12.5,17.5] (7.5,12.5] (7.5,12.5] (12.5,17.5]
#> [55] (2.5,7.5] [0,2.5] (7.5,12.5] (17.5,20] (2.5,7.5] (17.5,20]
#> [61] (17.5,20] (7.5,12.5] (7.5,12.5] (17.5,20] (7.5,12.5] [0,2.5]
#> [67] (2.5,7.5] [0,2.5] (12.5,17.5] (2.5,7.5] (12.5,17.5] (12.5,17.5]
#> [73] (7.5,12.5] (2.5,7.5] (12.5,17.5] (17.5,20] (2.5,7.5] (2.5,7.5]
#> [79] (17.5,20] (2.5,7.5] (2.5,7.5] [0,2.5] (12.5,17.5] (2.5,7.5]
#> [85] (2.5,7.5] (7.5,12.5] (2.5,7.5] (12.5,17.5] [0,2.5] (7.5,12.5]
#> [91] (7.5,12.5] [0,2.5] (12.5,17.5] (12.5,17.5] [0,2.5] (12.5,17.5]
#> [97] [0,2.5] (7.5,12.5] (2.5,7.5] (2.5,7.5]
#> Levels: [0,2.5] (2.5,7.5] (7.5,12.5] (12.5,17.5] (17.5,20]
table(cut(x, breaks=c(0, 2.5, 7.5, 12.5, 17.5, 20), include.lowest=TRUE))
#>
#> [0,2.5] (2.5,7.5] (7.5,12.5] (12.5,17.5] (17.5,20]
#> 18 28 24 20 10