在R中简洁地创建一个区间变量

时间:2017-07-25 06:37:51

标签: r dplyr

我想创建一个新的变量,它是一个区间,但是因为有很多区间我想知道我是否可以更简洁地编写代码。我希望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,写出来是不切实际的)?

2 个答案:

答案 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