【问题标题】:create dummy indicator for each variable in a data frame with specific values为具有特定值的数据框中的每个变量创建虚拟指标
【发布时间】:2018-01-04 20:16:10
【问题描述】:

我的数据框中有 115 个变量,我需要为每个负值或值为 999 的变量创建一个虚拟变量。如果原始 x 值

at<-c(1,-9,-1,999)
Bc<-c(1,-2,999,0)
df<-data.frame(at,Bc)

我想要一个具有以下格式的输出数据框:

at        Bc    I.at    I.Bc
 1         1      0       0
-9        -2      1       1
-1        999     1       1
999        0      1       0

【问题讨论】:

  • 你试过什么?有很多方法可以将变量添加到数据框中。基础 R:df$Iat &lt;- ifelse( df$at &lt; 0 | df$at == 999, 1,0 )
  • 好吧,你的代码是我所知道的,但由于我的数据集中有 115 个变量,我想为每个变量创建这个指标,这就是我卡住的地方,我想知道我是否可以一次对所有变量执行此操作,而不是分别对每个变量执行此操作。
  • dplyr::mutate_all()

标签: r dummy-variable


【解决方案1】:

您可以像这样使用基本 R 解决方案:

transform(df,I=ifelse(df<0|df==999,1,0))
   at  Bc I.at I.Bc
1   1   1    0    0
2  -9  -2    1    1
3  -1 999    1    1
4 999   0    1    0

【讨论】:

    【解决方案2】:

    这是使用data.table的解决方案:-

    library(data.table)
    setDT(df)
    df[, I.at := ifelse(at == 999 | at < 0, 1, 0)]
    df[, I.Bc := ifelse(Bc == 999 | Bc < 0, 1, 0)]
    

    这会给你:-

    at  Bc I.at I.Bc
    1:   1   1    0    0
    2:  -9  -2    1    1
    3:  -1 999    1    1
    4: 999   0    1    0
    

    【讨论】:

    • 谢谢。但是,正如我提到的,我的原始表中有 115 个变量,我想为所有变量运行它。这样我必须分别复制每个变量的过程。是否有另一种方法可以一次性处理所有 115 个变量?
    【解决方案3】:

    正如@Ryan dplyr 所建议的,函数mutate_all 是纯粹的魔法

    library(dplyr)
    df %>% mutate_all(funs(I = ifelse((.)<0|(.)==999,1,0)))
    

    输出

       at  Bc at_I Bc_I
    1   1   1    0    0
    2  -9  -2    1    1
    3  -1 999    1    1
    4 999   0    1    0
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-05
      • 1970-01-01
      • 2021-07-16
      • 1970-01-01
      • 2021-07-26
      • 1970-01-01
      相关资源
      最近更新 更多