我正在尝试在整个数据帧而不是单个列上使用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)
但是我想对整个数据集进行ifelse-我有很多变量,对每个数据集进行ifelse会很费时间。
因此,最终的数据集看起来像这样
Var1 Var2 Var3
1 1 1
1 1 0
0 1 1
1 1 1
1 0 1
非常感谢您!
答案 0 :(得分:2)
你可以做
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 <- structure(list(Var1 = c(1L, 3L, 0L, 3L, 5L), Var2 = c(1L, 2L,
1L, 3L, 0L), Var3 = c(1L, 0L, 2L, 1L, 3L)), .Names = c("Var1",
"Var2", "Var3"), row.names = c(NA, -5L), class = "data.frame")
答案 1 :(得分:2)
使用lapply
:
data.frame(lapply(df, function(x) as.integer(x != 0)))
数据:
df <- data.frame(
var1 = c(1,3,0,3,5),
var2 = c(1,2,1,4,0),
var3 = c(1,0,2,1,3)
)
答案 2 :(得分:1)
dplyr
方法:
library(dplyr)
data %>%
mutate_all(funs(ifelse(. == 0, 0, 1)))
# or...
data %>%
mutate_all(funs(as.integer(. > 0)))
答案 3 :(得分: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