我想创建一个新的变量,它是一个区间,但是因为有很多区间我想知道我是否可以更简洁地编写代码。我希望for循环或函数可以做到这一点,但是现在我想出了:
require(dplyr)
mtcars %>%
mutate(
mpg_interval = if_else(mpg < 15, "<15",
if_else(mpg < 20, "15-19",
if_else(mpg < 25, "20-24",
">24")))
)
是否有更简单的方法可以使用dplyr
命令制作多个间隔(即100,写出来是不切实际的)?
答案 0 :(得分:5)
我认为你需要的是case_when()
:
mtcars %>%
mutate(
mpg_interval = case_when(
mpg < 15 ~ "<15",
mpg < 20 ~ "15-19",
mpg < 25 ~ "20-24",
TRUE ~ ">24"
)
)
答案 1 :(得分:2)
正如@ Aramis7d和@Florian在上面的评论中指出的那样,cut
是工作的工具。如果间隔数太长而无法写出,则cut
可与seq
一起使用。
考虑
df <- data.frame(x=1:100)
df %>% mutate(rg=cut(x,c(seq(0, 25, 5), Inf))) %>%
group_by(rg) %>% summarise(c = n())
# A tibble: 6 × 2
rg c
<fctr> <int>
1 (0,5] 5
2 (5,10] 5
3 (10,15] 5
4 (15,20] 5
5 (20,25] 5
6 (25,Inf] 75