【问题标题】:Logical Operation in RR中的逻辑运算
【发布时间】:2016-04-11 06:27:36
【问题描述】:

我有三个名为 i1、i2 和 i3 的列。这些列中的每一列都是等长的向量。它们中的每一个都包含 1 和 -1。我想要一个输出列,其中的值应该是

  • 如果 i1,i2 和 i3 中的所有整数都是 1,则为 1
  • -1 如果 i1、i2 和 i3 中的所有条目都是 -1
  • 0 表示任何其他值 请提出前进的方向。

【问题讨论】:

  • 感谢 jogo 的回复。我不确定它会同时用于三个输入。我在 R. jj= (i1 | i2 | i3) & ( !(i1 & i2 & i3)) 中尝试了你的建议 #没用
  • 是的,很抱歉。编辑了问题。谢谢一百万!

标签: r logical-operators


【解决方案1】:

试试看(x 是你的矩阵):

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

【讨论】:

  • 我还不明白它是如何工作的,但这是我正在寻找的解决方案。
【解决方案2】:

你可以试试下面的

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】:

    你可以的

    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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-11
      • 1970-01-01
      相关资源
      最近更新 更多