【问题标题】:Recode a list of variables with mutate(ifelse)使用 mutate(ifelse) 重新编码变量列表
【发布时间】:2021-05-25 19:32:11
【问题描述】:

我正在尝试重新编码 df 中的变量列表。假设我有 30 个变量,var1、var2、var3 等,具有数值(1、2、3 等)。我想重新编码,比方说,每 1 为 0。

通常,我会使用以下代码:

df1<- df%>%
mutate(gender=ifelse(female==1, 0, gender))

但是,如果我不仅想将“性别”变量的所有 1 更改为 0,而且还想将整个变量列表(例如“性别 1”、“性别 2”...等)更改为 0,该怎么办?我使用什么语法?我宁愿不要为每个变量写一行代码。

谢谢!

【问题讨论】:

  • 将所有1更改为零到底是什么意思?只需减去 1。您还必须给出一个可重复的示例和预期的输出
  • 对不起,我不是故意的。我的意思是一次重新编码一系列变量的值。例如,如果“性别”变量用 1 和 2 而不是 0 和 1 进行编码,我希望所有 1 都变为 0,而所有 2 都变为 1。我是论坛的新手,不知道如何创建可重现的示例,抱歉!
  • 你可以简单地做gender - 1,所有的都是0,所有的2都是1

标签: r if-statement dplyr


【解决方案1】:

如果我正确理解您的问题,tidyverse 包会有所帮助。下面是一个例子:

library(tidyverse)

# sample data
var1 <- sample(0:3, 20, replace = T)
var2 <- sample(0:3, 20, replace = T)
var3 <- sample(0:3, 20, replace = T)

df <- data.frame(var1, var2, var3)

df %>% mutate(across(var1:var3, ~case_when(.x == 0 ~ 4, .x == 1 ~ 5, TRUE ~ as.numeric(.x))))              

case_whenif_else 的通用版本。它允许您输入多个条件。例子中,0记为4,1记为5,“TRUE”其实就是“else”。

mutateacross 跨您选择的列执行记录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-08
    • 1970-01-01
    • 2013-07-07
    • 2020-10-27
    • 2015-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多