我无法使用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))
我想在前两个变量中求值1和2的值。
我已经尝试了很多东西,但是没有用。
我想获得
V1 V2 V3
2 1 3
1 1 5
1 2 2
2 1 1
1 1 4
答案 0 :(得分:1)
有多种方法可以对此进行攻击。一个简单的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.else
或if_else
)。