我想知道如何使用dplyr为分组数值变量使用动态中断创建分类变量。
以下是玩具示例,例如,使用mtcars
数据,并且我希望在按mpg
和vs
分组时将汽车分类为低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\/)(.*)(?=\/)
任何帮助都将受到高度赞赏
答案 0 :(得分:0)
您可以使用dplyr
中的pmap
和purrr
。主要是首先为am
和vs
的所有唯一组合创建断点。
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
进行整理。