为具有特定值的数据框中的每个变量创建虚拟指标
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
我的数据框中有 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