【问题标题】:Changing multiple variables through conditional statement通过条件语句更改多个变量
【发布时间】:2019-06-03 11:58:20
【问题描述】:

我有许多变量,我想用 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 - 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 进行这些多重更改?

【问题讨论】:

标签: r tidyverse


【解决方案1】:

而不是将函数单独应用到每一列,每次您可以使用 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)

您的函数和建议的函数给出相同的结果

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 2016-10-05
    • 1970-01-01
    • 2020-12-05
    • 2020-01-12
    • 1970-01-01
    • 2011-09-10
    相关资源
    最近更新 更多