R:如何使用动态可变长度中断在分组的tbl_df中剪切数字变量

时间:2018-06-01 02:26:28

标签: r dplyr categorization

我想知道如何使用dplyr为分组数值变量使用动态中断创建分类变量。

以下是玩具示例,例如,使用mtcars数据,并且我希望在按mpgvs分组时将汽车分类为低am级别。如果汽车mpg低于其mpg的平均值library(tidyverse) mtcars %>% tbl_df() %>% group_by(vs, am) %>% mutate(lowMPG = ifelse(mpg < mean(mpg), "Yes", "No")) ,则该汽车将被归类为低mpg汽车。这是我这样做的方式

brk

然而,我的实际问题更为普遍,其中中断可以是向量而不是每个组的标量。用于计算中断的函数也可能来自外部源。因此,您可能将以下对象存储在R中的mpg中以剪切vs am breakPoint_1 breakPoint_2 breakPoint_3 0 0 14.0 15.0 17.0 0 1 17.0 19.0 1 0 19.0 21.0 1 1 28.4 变量。

(?<=dp\/)(.*)(?=\/)

任何帮助都将受到高度赞赏

1 个答案:

答案 0 :(得分:0)

您可以使用dplyr中的pmappurrr。主要是首先为amvs的所有唯一组合创建断点。

brk_point <- tibble(am = c(0,0,1,1),
                vs = c(0,1,0,1),
                brk = list(c(-Inf, 14,15,17, Inf),
                           c(-Inf, 17,19, Inf),
                           c(-Inf, 19,21, Inf),
                           c(-Inf, 27.4, Inf)))

foo <- mtcars %>%
  tbl_df() %>%
  left_join(., brk_point) 

foo_cut <- foo %>%
  dplyr::mutate(cut_mpg = purrr::pmap(list(.$mpg,.$brk),
                                      cut, 
                                      include.lowest = TRUE))

您还可以使用unnest进行整理。