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

时间:2018-01-04 20:16:11

标签: r dummy-variable

我的数据框中有115个变量,我需要为每个具有负值或值为999的变量创建一个虚拟变量。如果原始x值<0,虚拟指示器将取值1或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

3 个答案:

答案 0 :(得分: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

答案 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

答案 2 :(得分: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