[英]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.else
或if_else
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.