R 对整个数据集而不是单个列使用ifelse语句

R 对整个数据集而不是单个列使用ifelse语句,r,dataframe,if-statement,R,Dataframe,If Statement,我试图在整个数据帧而不是单个列上使用ifelse 如果我的数据是这样的 Var1 Var2 Var3 1 1 1 3 2 0 0 1 2 3 3 1 5 0 3 若要更改各个列,我会这样做 Var1_Binary<-ifelse(data$Var1 == 0, 0, 1) Var2_Binary<-ifelse(da

我试图在整个数据帧而不是单个列上使用ifelse

如果我的数据是这样的

Var1     Var2     Var3
 1        1        1
 3        2        0
 0        1        2
 3        3        1
 5        0        3 
若要更改各个列,我会这样做

Var1_Binary<-ifelse(data$Var1 == 0, 0, 1)
Var2_Binary<-ifelse(data$Var2 == 0, 0, 1)
Var3_Binary<-ifesle(data$Var3 == 0, 0, 1)
提前非常感谢

你可以这样做

DF[] <- as.integer(DF > 0)
DF
#  Var1 Var2 Var3
#1    1    1    1
#2    1    1    0
#3    0    1    1
#4    1    1    1
#5    1    0    1
如果要扩展数据帧,请尝试

DF[paste0(names(DF), "_Binary")] <- as.integer(DF > 0)
DF
#  Var1 Var2 Var3 Var1_Binary Var2_Binary Var3_Binary
#1    1    1    1           1           1           1
#2    3    2    0           1           1           0
#3    0    1    2           0           1           1
#4    3    3    1           1           1           1
#5    5    0    3           1           0           1
资料

你可以

DF[] <- as.integer(DF > 0)
DF
#  Var1 Var2 Var3
#1    1    1    1
#2    1    1    0
#3    0    1    1
#4    1    1    1
#5    1    0    1
如果要扩展数据帧,请尝试

DF[paste0(names(DF), "_Binary")] <- as.integer(DF > 0)
DF
#  Var1 Var2 Var3 Var1_Binary Var2_Binary Var3_Binary
#1    1    1    1           1           1           1
#2    3    2    0           1           1           0
#3    0    1    2           0           1           1
#4    3    3    1           1           1           1
#5    5    0    3           1           0           1
资料

使用lappy:

数据:

使用lappy:

数据:

dplyr方法:

library(dplyr)

data %>%
  mutate_all(funs(ifelse(. == 0, 0, 1)))

# or...
data %>%
  mutate_all(funs(as.integer(. > 0)))
dplyr方法:

library(dplyr)

data %>%
  mutate_all(funs(ifelse(. == 0, 0, 1)))

# or...
data %>%
  mutate_all(funs(as.integer(. > 0)))

下面是在每列上使用ifelse的另一个解决方案:

data.frame(Map(ifelse, list(df==0), 0, 1))

  var1 var2 var3
1    1    1    1
2    1    1    0
3    0    1    1
4    1    1    1
5    1    0    1

下面是在每列上使用ifelse的另一个解决方案:

data.frame(Map(ifelse, list(df==0), 0, 1))

  var1 var2 var3
1    1    1    1
2    1    1    0
3    0    1    1
4    1    1    1
5    1    0    1