我有一个通过dput()
函数显示的矩阵。
Matrix <- structure(list(Int = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1), Time = c(31, 34, 6, 48, 36, 46, 20, 45, 49, 8, 40,
28, 14, 13, 22, 30, 21, 15, 8, 16, 22, 47, 31, 27, 25, 43, 9,
24, 20, 7, 48, 10, 48, 18, 44, 26, 43, 39, 44, 41, 20, 36, 43,
4, 30, 16, 41, 2, 49, 25, 43, 5, 31, 15, 16, 20, 11, 16, 20,
14, 48, 26, 44, 4, 29, 42, 41, 14, 47, 21, 25, 11, 41, 20, 48,
35, 4, 42, 19, 8, 34, 23, 39, 25, 11, 29, 24, 31, 9, 20, 6, 45,
46, 23, 32, 12, 23, 11, 7, 39), Binary = c(1, 1, 1, 1, 1, 1,
0, 1, 0, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 0, 0,
0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 0,
1, 0, 1, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0, 1, 0, 0, 1, 0, 0, 1,
1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 1, 0, 0, 1, 0, 1, 0,
0, 1, 1, 0, 1, 0, 0, 0, 0, 1), IndID = structure(c(1L, 2L, 3L,
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L,
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L,
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L,
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L,
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L,
4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L, 4L, 1L, 2L, 3L,
4L), .Label = c("AAA", "BBB", "CCC", "DDD"), class = "factor")), .Names = c("Int",
"Time", "Binary", "IndID"), class = "data.frame", row.names = c(NA,
-100L))
head(Matrix)
Int Time Binary IndID
1 1 31 1 AAA
2 1 34 1 BBB
3 1 6 1 CCC
4 1 48 1 DDD
5 1 36 1 AAA
6 1 46 1 BBB
Matrix有100行4列。数学需要前三列。第4列用作ID。我想将矢量矩阵(下面)乘以每个个体的较大矩阵的前三列。
这是矢量矩阵......
coef <- c(-0.13731791, -0.01122941, 0.65487107)
coef <- as.matrix(coef)
coef
我正在尝试使用下面的代码。
Matrix[Matrix$IndID=="AAA", c(1,2,3)] %*% coef
单词:当IndID行包含“AAA”时,乘以coef的列1:3乘以coef。这会导致以下错误。
"Error in Matrix[Matrix$IndID == "AAA", c(1, 2, 3)] %*% coef :
requires numeric/complex matrix/vector arguments"
我还尝试将两个条件组合成条件,使用&amp;正如我在其他SO帖子上看到的那样。该代码和产生的错误如下。
Matrix[,(Matrix$IndID=="AAA") & (c(1,2,3))] %*% coef
Error in `[.data.frame`(Matrix, , (Matrix$IndID == "AAA") & (c(1, 2, 3))) :
undefined columns selected
In addition: Warning message:
In (Matrix$IndID == "AAA") & (c(1, 2, 3)) :
longer object length is not a multiple of shorter object length
这些数据是我实际数据的一个示例,我试图将这些函数添加到一个包含许多个人的较大for()
循环中。
感谢您的任何建议!
答案 0 :(得分:0)
Matrix
是数据框,而不是矩阵。您可以使用Matrix
强制要进行数学运算的as.matrix()
子集。尝试:
as.matrix(Matrix[Matrix$IndID=="AAA", c(1,2,3)]) %*% coef