可能是一个愚蠢的问题,我想用多个条件重新编写多个变量。

数据示例:

library(tidyverse)
s <- matrix(sample(1:15, 20, replace = TRUE), ncol = 4)
s <- as_tibble(s)

这给出了这样的东西:
# A tibble: 5 x 4
     V1    V2    V3    V4
  <int> <int> <int> <int>
1    11     2     5    14
2     5     4    15     5
3    13    15     2     5
4     7    13    15    11
5    11     5    12     3

我想在这种情况下重新编码V1,V2,V3,并使V4等于:
如果值小于或等于5,则得到1;如果值大于5,但小于或等于10,则得到2;最后,如果值大于10,则得到3。

输出应如下所示:
# A tibble: 5 x 4
         V1    V2    V3    V4
      <int> <int> <int> <int>
    1    3     1     1     14
    2    1     1     3      5
    3    3     3     1      5
    4    2     3     3     11
    5    3     1     3      3

我知道apply,sapply,vapply,但是我想使用tidyverse包中的函数以一种优雅的方式重新编码。

提前致谢!

最佳答案

要详细说明@MrFlick注释,可以将mutate_at与dplyr中的case_when函数结合使用。它看起来像这样:

s %>%
  mutate_at(vars(V1:V3),
            function(x) case_when(x <= 5 ~ 1, x <= 10 ~ 2, TRUE ~ 3))

这将为您提供:
# A tibble: 5 x 4
     V1    V2    V3    V4
  <dbl> <dbl> <dbl> <int>
1     3     1     3     6
2     2     1     1     8
3     2     3     1    14
4     1     3     3    15
5     1     2     3     7

08-24 12:53