如何在 R 中跨多个列分成 4 个相等的组

How to divide into 4 equal groups across multiple columns in R

我正在处理一个大型数据集,我希望重新编码大量变量,以便将它们分别分成 4 个大小相等的组。

我可以使用 sjmisc 库中的 split_var 函数对单个变量执行此操作,如下所示:

library(sjmisc)    

mtcars %>% select(mpg, cyl, disp)

split_var(mtcars, mpg, n = 4)

它会根据旧值生成一个新类别,该类别表示特定行所在的组。但是,我找不到跨多个变量执行此操作的解决方案。如果我手动输入每个变量的列名,它会起作用,如下所示:

split_var(mtcars, mpg, cyl, disp,  n = 4)

但是,由于我正在处理大型数据集,因此我需要找到一种无需手动输入每一行名称的方法。我尝试了相当于 split_var(mtcars, c("mpg", "cyl", "disp"), n = 4) 的方法,它会产生一个错误:

> split_var(mtcars, c("mpg", "cyl", "disp"),  n = 4)
Error: Problem with `mutate()` input `..1`.
ℹ `..1 = c("mpg", "cyl", "disp")`.
ℹ `..1` must be size 32 or 1, not 3.

我想我可能需要 lapply,但我不知道如何在这种情况下使用它。感谢您的帮助!

split_var 使用 select_helpers。所以你可以这样做:

mtcars %>% 
  split_var(everything(), n = 4)

mtcars %>% 
  split_var(all_of(c("mpg","cyl")), n = 4)

split_var 仅适用于数字变量,因为它使用分位数,因此您可以:

 mtcars %>%
    sjmisc::split_var(where(is.numeric), n = 4)