我的数据框中有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
答案 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