Логическое значение 1/0, если значение найдено в нескольких столбцах - PullRequest
0 голосов
/ 06 мая 2020

У меня есть такой df:

x1 x2 x3
1  4  1
2  3  1
2  2  4 

I для создания новой переменной с именем found, если значение 1 присутствует в x1, x2, x3. Ожидаемый результат:

x1 x2 x3 found
1  4  1  1
2  3  1  1
2  2  4  0

Я использую tidyverse и изменяю, но не могу найти, как изменить с несколькими столбцами.

Thx!

1 Ответ

1 голос
/ 06 мая 2020

Мы можем использовать rowSums:

df$found <- +(rowSums(df == 1) > 0)

#  x1 x2 x3 found
#1  1  4  1     1
#2  2  3  1     1
#3  2  2  4     0

Если вы хотите использовать его в dplyr pipe:

library(dplyr)
df %>% mutate(found = +(rowSums(. == 1) > 0))

Некоторые другие способы:

df$found <- +(apply(df == 1, 1, any))
df$found <- +(Reduce(`|`, lapply(df, `==`, 1)))

+ в начале преобразует логические значения из TRUE / FALSE в 1 / 0 соответственно.

...