【问题标题】:Creating multiple new variables based on existing ones and recode them at the same time R基于现有变量创建多个新变量并同时重新编码它们 R
【发布时间】:2021-06-14 20:18:00
【问题描述】:

如果我想从预先存在的范围创建新的变量并更改它们的值,而不必单独完成它们,最好的方法是什么?

例如,这里我根据 1 创建 1C,但将 2s 重新编码为零等。但是,我将如何基于相同的逻辑同时创建 100 个新变量(称为 1C、2C、3C 等) ?

df$`1C`[df$`1`==1]<-1
df$`1C`[df$`1`==2]<-0
df$`1C`[df$`1`==0]<-0

【问题讨论】:

    标签: r variables recode


    【解决方案1】:

    我们可以使用dplyr::acrossdplyr::recode

    假设我们有以下数据:

    set.seed(123)
    df <- setNames(data.frame(1:5,matrix(sample(0:2,25,replace = TRUE),nrow = 5)),c("ID",1:5))
    df
      ID 1 2 3 4 5
    1  1 2 0 0 0 2
    2  2 0 2 0 1 0
    3  3 0 2 1 0 1
    4  4 2 1 2 0 0
    5  5 1 0 0 2 0
    

    我们可以使用 Tidyselect 和 : 来指定列。 dplyr::recode 接受一个 ... 参数,该参数列出了要重新编码的 &lt;have&gt; = &lt;want&gt; 集合。我们可以使用.names = 参数来指定我们希望新列的名称如何显示。

    library(dplyr)
    df %>%
       mutate(across(`1`:`5`, ~recode(.,`0` = 0, `1` = 1, `2` = 0),
                     .names = "{.col}C"))
      ID 1 2 3 4 5 1C 2C 3C 4C 5C
    1  1 2 1 1 0 0  0  1  1  0  0
    2  2 2 1 1 2 0  0  1  1  0  0
    3  3 2 1 0 2 2  0  1  0  0  0
    4  4 1 2 1 0 1  1  0  1  0  1
    5  5 2 0 2 0 2  0  0  0  0  0
    

    【讨论】:

    • 正在创建 data.frame 中的新变量。您只需要分配结果。例如,您可以在末尾添加-&gt; result 或在开头添加result &lt;-
    • 好的,我将第一部分更改为 df%,这似乎也有效。再次感谢您!
    猜你喜欢
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 2018-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多