为具有特定值的数据框中的每个变量创建虚拟指标

create dummy indicator for each variable in a data frame with specific values

我的数据框中有 115 个变量,我需要为每个具有负值或值为 999 的变量创建一个虚拟变量。如果原始 x 值 <,虚拟指标将取值为 1 0 或 999,否则为 0。例如对于以下数据框

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

这是一个使用 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

您可以像这样使用基础 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

正如@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