-4

我有两个矩阵 x 和 y:

x
  1    4    7   10
  2    5    8   11
  3    6    9   12

y
1
4
3
6

现在我想检查是否x存在来自第一列的值,y那么它应该再添加一列x并添加yes,如果不添加,则添加non并存储在名为 m 的第三个矩阵中。

基本上我应该得到这样的答案:

m
1    4    7   10    yes
2    5    8   11    non
3    6    9   12    yes
4

1 回答 1

1

假设你的矩阵“x”和你的向量“y”是:

x <- structure(c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12), .Dim = 3:4)
x
#      [,1] [,2] [,3] [,4]
# [1,]    1    4    7   10
# [2,]    2    5    8   11
# [3,]    3    6    9   12
y <- c(1, 4, 3, 6)

您可以使用apply将“x”的每一行与向量“y”进行比较。用于cbind将该比较的结果作为新列添加到matrix名为“m”的新列中。值“1”表示TRUE(或“是”),值“0”表示FALSE(或“非”)。

m <- cbind(x, apply(x, 1, function(z) any(z %in% y)))
m
#      [,1] [,2] [,3] [,4] [,5]
# [1,]    1    4    7   10    1
# [2,]    2    5    8   11    0
# [3,]    3    6    9   12    1

如果您真的想要“是”和“非”值,我建议您使用 adata.frame而不是 a,matrix因为 amatrix只能包含一种类型的值,而 adata.frame在每一列中可以有不同类别的数据。

于 2013-09-27T06:12:24.663 回答