【发布时间】:2018-07-08 07:49:04
【问题描述】:
这个问题与我问过previously 的问题类似,但我在这里对组的定义略有不同。
我试图将向量中的某些元素与矩阵相乘,同时将向量中的所有其他元素设置为零,然后对下一组重复该过程。我要使用的元素相隔n个元素。
我的数据集又非常大,所以为了便于说明,让我们:
a <- c(2:7)
b <- matrix(1:36, byrow = TRUE, nrow = 6)
description <- c("AA1", "AA2", "AA3", "BB1", "BB2", "BB3")
names(a) <- description
给予:
a
AA1 AA2 AA3 BB1 BB2 BB3
2 3 4 5 6 7
b
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 1 2 3 4 5 6
[2,] 7 8 9 10 11 12
[3,] 13 14 15 16 17 18
[4,] 19 20 21 22 23 24
[5,] 25 26 27 28 29 30
[6,] 31 32 33 34 35 36
将 a 定义为具有三个组:
- 第 1 组的元素 1 和 4
- 第 2 组的元素 2 和 5
- 第 3 组的元素 3 和 6
所以在这个例子中,我想将向量中的每个元素与相同的数字相匹配,然后将其与矩阵相乘。所以对于第 1 组,向量将是 (2, 0, 0, 5, 0, 0) 第 2 组 (0, 3, 0, 0, 6, 0) 和第 3 组 (0, 0, 4, 0, 0, 7)
第 1 组的向量矩阵乘法 (a %*% b) 会给出结果:
[,1] [,2] [,3] [,4] [,5] [,6]
[1,] 97 104 111 118 125 132
所以我在考虑使用 grepl 代码匹配向量内的数字,或者以某种方式告诉 r 将组之间的两个元素设置为零,然后为下一组重复该过程。
最好的代码是什么?
【问题讨论】: