Использование оператора ifelse для всего набора данных вместо одного столбца - PullRequest
0 голосов
/ 17 сентября 2018

Я пытаюсь использовать 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)

Но я бы хотел сделать это, если всенабор данных - у меня много переменных, и для каждой из них потребуется много времени.

Итак, окончательный набор данных будет выглядеть так:

Var1     Var2     Var3
 1        1        1
 1        1        0
 0        1        1
 1        1        1
 1        0        1 

Заранее большое спасибо!

Ответы [ 4 ]

0 голосов
/ 18 сентября 2018

Вот еще одно решение, использующее 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
0 голосов
/ 17 сентября 2018

С 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)
)
0 голосов
/ 17 сентября 2018

Подход dplyr:

library(dplyr)

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

# or...
data %>%
  mutate_all(funs(as.integer(. > 0)))
0 голосов
/ 17 сентября 2018

Вы можете сделать

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

data

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")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...