2016-04-11 2 views
0

У меня есть три столбца с именами i1, i2 и i3. Каждый из этих столбцов является вектором равной длины. Каждый из них содержит 1 и -1. Я хочу, чтобы иметь выходной столбец, где значение должно бытьЛогическая операция в R

  • 1, если все заходы в i1, i2 и i3 является 1
  • -1, если все записи в i1, i2 и i3 является -1
  • 0 для любых других значений Пожалуйста, предложите путь вперед.

three columns of a data frame

+0

Спасибо за JOGO ответа. Я не уверен, что он будет работать на три входа одновременно. Я попробовал ваше предложение в R. jj = (i1 | i2 | i3) & (! (I1 & i2 & i3)) # Не работал –

+0

Да, извините. Отредактировал вопрос. Бесконечно благодарен! –

ответ

1

Вы можете попробовать следующее

set.seed(1) 
(x <- matrix(sample(c(-1,1), 60, TRUE), ncol = 3)) 

#  [,1] [,2] [,3] 
# [1,] -1 1 1 
# [2,] -1 -1 1 
# [3,] 1 1 1 
# [4,] 1 -1 1 
# [5,] -1 -1 1 
# [6,] 1 -1 1 
# [7,] 1 -1 -1 
# [8,] 1 -1 -1 
# [9,] 1 1 1 
# [10,] -1 -1 1 
# [11,] -1 -1 -1 
# [12,] -1 1 1 
# [13,] 1 -1 -1 
# [14,] -1 -1 -1 
# [15,] 1 1 -1 
# [16,] -1 1 -1 
# [17,] 1 1 -1 
# [18,] 1 -1 1 
# [19,] -1 1 1 
# [20,] 1 -1 -1 

Когда строчные суммы являются 3 или -3, умножать знаком

rs <- rowSums(x) 
cbind(x, ind = (abs(rs) == 3) * sign(rs)) 

#    ind 
# [1,] -1 1 1 0 
# [2,] -1 -1 1 0 
# [3,] 1 1 1 1 
# [4,] 1 -1 1 0 
# [5,] -1 -1 1 0 
# [6,] 1 -1 1 0 
# [7,] 1 -1 -1 0 
# [8,] 1 -1 -1 0 
# [9,] 1 1 1 1 
# [10,] -1 -1 1 0 
# [11,] -1 -1 -1 -1 
# [12,] -1 1 1 0 
# [13,] 1 -1 -1 0 
# [14,] -1 -1 -1 -1 
# [15,] 1 1 -1 0 
# [16,] -1 1 -1 0 
# [17,] 1 1 -1 0 
# [18,] 1 -1 1 0 
# [19,] -1 1 1 0 
# [20,] 1 -1 -1 0 
3

Просто попробуйте (x это ВАШ матрица):

(rowSums(x==1)==ncol(x)) - (rowSums(x==-1)==ncol(x)) 
+0

Хорошее (сложное) решение. – jogo

+0

Я еще не понял, как это работает, но это решение, которое я искал. –

0

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

f <- function(x) ifelse(all(x==1), 1, ifelse(all(x==-1), -1, 0)) 
apply(df, 1, f) # or: 
df$result <- apply(df, 1, f)