我有此代码可以基于分位数创建两个子集列,一个用于中间拆分的列,一个用于四分位数的列。
mtcars <- subset(mtcars, select = c("cyl", "disp"))
mtcars$median_split <- ifelse(mtcars$disp <= median(mtcars$disp), "below_median","above_median")
mtcars$quantile_split <- cut(mtcars$disp, breaks = c(0, quantile(mtcars$disp)),labels = c("1_quartile",paste0(1:4, "_quartile")))
这对整个数据集都很好,但是我该如何为每个cyl
分别执行此操作,请?
因此,我希望根据每个cyl
组中的disp
值打印中位数/四分位数拆分标签。谢谢。
这可以使用dplyr
软件包来完成:
library(dplyr)
mtcars %>%
select(cyl, disp) %>%
group_by(cyl) %>%
mutate(median_split = ifelse(disp <=median(disp), "below_median","above_median"),
quartile_split = cut(disp, breaks = c(0, quantile(disp)), labels = c("1_quartile",paste0(1:4, "_quartile")))) %>%
arrange(cyl)
此代码按cyl
列将数据分组,然后根据每个cyl
组中的disp
值计算median_split
和quartile_split
。