Как объединить логические векторы в новый столбец - PullRequest
0 голосов
/ 15 февраля 2019

У меня есть много столбцов логических векторов, и я хотел бы иметь возможность объединить 2 или более столбцов в один, и если в строке есть любое ИСТИНА, чтобы получить только ИСТИНА в объединенном столбце.

Вот пример 2 столбцов и различных комбинаций

X <- c(T,F,T,F,F,T,F,T,T,F,F,F)
Y <- matrix(X,nrow = 6, ncol = 2)
Y
      [,1] [,2]
[1,]  TRUE FALSE 
[2,] FALSE  TRUE
[3,]  TRUE  TRUE
[4,] FALSE FALSE
[5,] FALSE FALSE
[6,]  TRUE FALSE

Как создать 3-й столбец, "добавляющий" истинное значение и оставляющий позади, если оба говорят False, и это также будет работать, если естьбыли добавлены 3 или более столбцов?

Ответы [ 3 ]

0 голосов
/ 15 февраля 2019

Вот возможное решение с использованием apply() и логического оператора |, которое будет работать для любого количества столбцов Y.

result = cbind(Y, apply(Y, 1, FUN = function (x) Reduce(f="|", x)))
result
#       [,1]  [,2]  [,3]
# [1,]  TRUE FALSE  TRUE
# [2,] FALSE  TRUE  TRUE
# [3,]  TRUE  TRUE  TRUE
# [4,] FALSE FALSE FALSE
# [5,] FALSE FALSE FALSE
# [6,]  TRUE FALSE  TRUE
0 голосов
/ 15 февраля 2019

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

cbind(Y, rowSums(Y) > 0)

#      [,1]  [,2]  [,3]
#[1,]  TRUE FALSE  TRUE
#[2,] FALSE  TRUE  TRUE
#[3,]  TRUE  TRUE  TRUE
#[4,] FALSE FALSE FALSE
#[5,] FALSE FALSE FALSE
#[6,]  TRUE FALSE  TRUE

. Это вернет TRUE, если в любой строке есть хотя бы 1 TRUE и FALSE иначе.Это также будет работать для любого количества столбцов.

0 голосов
/ 15 февраля 2019

Используйте приведенный ниже код, основанный на Base R

X <- c(T,F,T,F,F,T,F,T,T,F,F,F)
Y <- as.data.frame(matrix(X,nrow = 6, ncol = 2))
unique(Y$V1)

Y$condition <- ifelse(Y$V1 == "TRUE" | Y$V2 == "TRUE","TRUE","FALSE")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...