繁体   English   中英

dplyr mutate_at:使用重新编码创建新变量

[英]dplyr mutate_at: create new variables with recode

我无法使用 dplyr 创建多个反向变量。

问题的定义:

df <- data.frame (V1 =c (1,2,2,1,2), V2 = c(2,2,1,2,2), V3 = c(3,5,2,1,4))

我想反转前 2 个变量中的值 1 和 2。
我尝试了很多东西,但没有任何效果。

我想获得

V1  V2  V3
2   1   3
1   1   5
1   2   2
2   1   1
1   1   4

有多种方法可以攻击它。 一个简单的case_when语句就足够了:

library(tidyverse)

df <- data.frame(
  V1 =c (1,2,2,1,2), 
  V2 = c(2,2,1,2,2), 
  V3 = c(3,5,2,1,4)
)
df
#>   V1 V2 V3
#> 1  1  2  3
#> 2  2  2  5
#> 3  2  1  2
#> 4  1  2  1
#> 5  2  2  4

df %>%
  mutate(
    V1 = case_when(V1 == 1 ~ 2, V1 == 2 ~ 1),
    V2 = case_when(V2 == 1 ~ 2, V2 == 2 ~ 1)
  )
#>   V1 V2 V3
#> 1  2  1  3
#> 2  1  1  5
#> 3  1  2  2
#> 4  2  1  1
#> 5  1  1  4

但既然你说mutate_at ,你可能想使用一个函数:

flip_ones_and_twos <- function(x) {
  return(x %% 2 + 1)
}

df %>%
  mutate_at(vars(V1, V2), ~ flip_ones_and_twos(.))
#>   V1 V2 V3
#> 1  2  1  3
#> 2  1  1  5
#> 3  1  2  2
#> 4  2  1  1
#> 5  1  1  4

我确定还有其他方法(例如if.elseif_else )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM