2013-09-27 63 views
-4

存在我有两个矩阵x和y:如何R中添加一列,如果从一个矩阵的值在另一个矩阵

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 
+3

欢迎来到Stack Overflow!看起来你希望我们为你写一些代码。尽管许多用户愿意为遇险的编码人员编写代码,但他们通常只在海报已尝试自行解决问题时才提供帮助。证明这一努力的一个好方法是包含迄今为止编写的代码,示例输入(如果有的话),期望的输出和实际获得的输出(控制台输出,堆栈跟踪,编译器错误 - 无论是适用)。您提供的细节越多,您可能会收到的答案就越多 – dhein

回答

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将该比较的结果作为新列添加到名为“m”的新matrix。值“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 

如果你真的想“是”与“非”的价值观,我会建议你使用的data.frame而不是matrix因为matrix只能包含一种类型的值,而data.frame可以有不同类别的每列中的数据。

相关问题