Конвертировать фрейм данных в 1 и 0 - PullRequest
0 голосов
/ 09 октября 2019

У меня есть большой тиббл, подобный этому:

a b c d e f
1 1 1 0 0 1
4 5 1 1 0 1
3 1 0 0 0 0 

И конвертируйте его в это (в идеале с тидиверсом), чтобы 0 оставались, в то время как 1 и больше преобразуются в 1:

a b c d e f 
1 1 1 0 0 1
1 1 1 1 0 1
1 1 0 0 0 0 

Переменные имеют разные имена и переходят от второго столбца к последнему столбцу.

Спасибо!

Ответы [ 2 ]

4 голосов
/ 09 октября 2019

Тидиверс подход может быть:

library(dplyr)

df %>%
   mutate_all(~ +(.x > 0))

  a b c d e f
1 1 1 1 0 0 1
2 1 1 1 1 0 1
3 1 1 0 0 0 0

Если вы хотите преобразовать все, кроме первого столбца, вы можете сделать:

df %>%
  mutate_at(vars(-1), ~ +(.x > 0))
3 голосов
/ 09 октября 2019

Вы можете использовать pmin, который будет выбирать минимальное значение между 1 и значением в кадре данных.

pmin(df, 1)

#  a b c d e f
#1 1 1 1 0 0 1
#2 1 1 1 1 0 1
#3 1 1 0 0 0 0

data

df <- structure(list(a = c(1L, 4L, 3L), b = c(1L, 5L, 1L), c = c(1L, 
1L, 0L), d = c(0L, 1L, 0L), e = c(0L, 0L, 0L), f = c(1L, 1L, 
0L)), class = "data.frame", row.names = c(NA, -3L))
...