在 R 中使用 tidyverse 重新编码多个变量
Recoding multiple variables using tidyverse in R
可能是个愚蠢的问题,我想在一个小标题中用多个条件重新编码多个变量。
数据示例:
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
可能是个愚蠢的问题,我想在一个小标题中用多个条件重新编码多个变量。
数据示例:
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