R 通过条件语句更改多个变量
我想用if-else语句更改一些变量。以下是我正在使用的完成工作的代码:R 通过条件语句更改多个变量,r,tidyverse,R,Tidyverse,我想用if-else语句更改一些变量。以下是我正在使用的完成工作的代码: df <- df %>% mutate(p = ifelse(gender == 0, p, ifelse(gender==1, 100 - p,NA)), t = ifelse(gender == 0, t, ifelse(gender==1, 100 - t,NA)), c = ifelse(gender == 0, c, ifelse(gender==1, 100
df <- df %>%
mutate(p = ifelse(gender == 0, p, ifelse(gender==1, 100 - p,NA)),
t = ifelse(gender == 0, t, ifelse(gender==1, 100 - t,NA)),
c = ifelse(gender == 0, c, ifelse(gender==1, 100 - c,NA)),
s = ifelse(gender == 0, s, ifelse(gender==1, 100 - s,NA)),
i = ifelse(gender == 0, i, ifelse(gender==1, 100 - i,NA)))
但是,是否有一种更简洁的方法可以使用tidyverse进行这些多个更改?而不是将函数分别应用于每一列,每次使用apply时都必须键入列名。。为你做这件事 一些数据:
n <- 10
df <- data.frame(matrix(round(rnorm(n*5), 0), ncol= 5))
variablenames <- c("p", "t", "c", "s", "i")
names(df) <- variablenames
df$gender <- sample(0:1, n, replace= TRUE)
您的函数和suggeted函数给出相同的结果
df1 <- df %>%
mutate(p = ifelse(gender == 0, p, ifelse(gender==1, 100 - p,NA)),
t = ifelse(gender == 0, t, ifelse(gender==1, 100 - t,NA)),
c = ifelse(gender == 0, c, ifelse(gender==1, 100 - c,NA)),
s = ifelse(gender == 0, s, ifelse(gender==1, 100 - s,NA)),
i = ifelse(gender == 0, i, ifelse(gender==1, 100 - i,NA)))
df2 <- apply(df[ , variablenames], 2, function(x){
ifelse(df$gender == 0, x, ifelse(df$gender==1, 100 - x,NA))
})
df2 <- cbind.data.frame(df2, df$gender)
all(df1 == df2)
TRUE
请提出你的问题。