R Ifelse: Найти, если какой-либо столбец соответствует условию - PullRequest
1 голос
/ 07 марта 2020

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

Я могу сделать это вручную с помощью оператора OR, но мне было интересно, есть ли простой способ применить его для большего количества столбцов.

Пример:

data <- data.frame(V1=c("A","B"),V2=c("A","A","A","B","B","B"),V3=c("A","A","B","B","A","A"))
data[4] <- ifelse((data[1]=="A"|data[2]=="A"|data[3]=="A"),1,0)

Таким образом, 4-я строка является единственной, которая не удовлетворяет условию для всех столбцов:

  V1 V2 V3 V1
1  A  A  A  1
2  B  A  A  1
3  A  A  B  1
4  B  B  B  0
5  A  B  A  1
6  B  B  A  1

Знаете ли вы, как применить условие в более коротком коде? Я пробовал что-то вроде

data[4] <- ifelse(any(data[,c(1:3)]=="A"),1,0)

, но он учитывает условие для всего набора данных, а не по строкам, поэтому всем строкам присваивается 1.

Ответы [ 3 ]

1 голос
/ 07 марта 2020

Мы можем использовать Reduce с lapply

data$NewCol <- +( Reduce(`|`, lapply(data, `==`, 'A')))
0 голосов
/ 07 марта 2020

Попробуйте:

data$V4 <- +(rowSums(data == 'A') > 0)

Вывод:

  V1 V2 V3 V4
1  A  A  A  1
2  B  A  A  1
3  A  A  B  1
4  B  B  B  0
5  A  B  A  1
6  B  B  A  1
0 голосов
/ 07 марта 2020

Мы можем использовать apply построчно:

data$ans <- +(apply(data[1:3] == "A", 1, any))
data

#  V1 V2 V3 ans
#1  A  A  A   1
#2  B  A  A   1
#3  A  A  B   1
#4  B  B  B   0
#5  A  B  A   1
#6  B  B  A   1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...