R如何在应用条件的情况下进行简单的向量/矩阵计算?

R如何在应用条件的情况下进行简单的向量/矩阵计算?,r,matrix,vector,R,Matrix,Vector,我有一个向量,即。 更改向量(其中日期为行名) 和一个矩阵: 2012-07-30 2012-08-06 2012-08-13 2012-08-20 2012-05-28 1.0 2.0 3.0 2.0 2012-06-04 1.0 2.0 3.0 2.0 2012-06-11 1.0 2.0 3.0 2.0 2012-06-18 1.0 2.0 3.0 2.0 2012-06-25 1.0 2.0 3.0 2.0 2012-07-02 1.0 2.0 3.0 2.0

我有一个向量,即。 更改向量(其中日期为行名)

和一个矩阵:

    2012-07-30  2012-08-06  2012-08-13  2012-08-20
2012-05-28  1.0 2.0 3.0 2.0
2012-06-04  1.0 2.0 3.0 2.0
2012-06-11  1.0 2.0 3.0 2.0
2012-06-18  1.0 2.0 3.0 2.0
2012-06-25  1.0 2.0 3.0 2.0
2012-07-02  1.0 2.0 3.0 2.0
2012-07-09  1.0 2.0 3.0 2.0
2012-07-16  1.0 2.0 3.0 2.0
2012-07-23  1.0 2.0 3.0 2.0
2012-07-30  1.0 2.0 3.0 2.0
2012-08-06  NA  2.0 3.0 2.0
2012-08-13  NA  NA  3.0 2.0
2012-08-20  NA  NA  NA  2.0
2012-08-27  NA  NA  NA  NA
我想做一个简单的计算,如果我用矩阵乘以向量 那么2012-08-13的所有栏目将增加150% i、 e.至4.5。。看这个例子,我在那里做了计算

t(t(my_matrix) * (change_vector)) 

    2012-07-30  2012-08-06  2012-08-13  2012-08-20
2012-05-28  1.0 2.0 4.5 2.0
2012-06-04  1.0 2.0 4.5 2.0
2012-06-11  1.0 2.0 4.5 2.0
2012-06-18  1.0 2.0 4.5 2.0
2012-06-25  1.0 2.0 4.5 2.0
2012-07-02  1.0 2.0 4.5 2.0
2012-07-09  1.0 2.0 4.5 2.0
2012-07-16  1.0 2.0 4.5 2.0
2012-07-23  1.0 2.0 4.5 2.0
2012-07-30  1.0 2.0 4.5 2.0
2012-08-06  NA  2.0 4.5 2.0
2012-08-13  NA  NA  4.5 2.0
2012-08-20  NA  NA  NA  2.0
2012-08-27  NA  NA  NA  NA
然而,我想限制乘法,使其仅计算相对于该日期的最后9周,例如,对于相对于提升日期的9周,列2012-08-13仅增加到4.5 i、 e.输出应为:

    2012-07-30  2012-08-06  2012-08-13  2012-08-20
2012-05-28  1.0 2.0 3.0 2.0
2012-06-04  1.0 2.0 3.0 2.0
2012-06-11  1.0 2.0 4.5 2.0
2012-06-18  1.0 2.0 4.5 2.0
2012-06-25  1.0 2.0 4.5 2.0
2012-07-02  1.0 2.0 4.5 2.0
2012-07-09  1.0 2.0 4.5 2.0
2012-07-16  1.0 2.0 4.5 2.0
2012-07-23  1.0 2.0 4.5 2.0
2012-07-30  1.0 2.0 4.5 2.0
2012-08-06  NA  2.0 4.5 2.0
2012-08-13  NA  NA  4.5 2.0
2012-08-20  NA  NA  NA  2.0
2012-08-27  NA  NA  NA  NA
请注意,在我的实际例子中,我的矩阵相当大,变化向量将有很多不同的值


谢谢

以后,如果您使用类似于
dput()
的方法发布代码以读取数据,这会很有帮助。让那些愿意提供帮助的人更容易接受

change_vector <- structure(c(1, 1, 1.5, 1), 
    .Names = c("2012-07-30", "2012-08-06", "2012-08-13", "2012-08-20"))
my_matrix <- structure(c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, NA, NA, NA, NA, 2, 
    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, NA, NA, NA, 3, 3, 3, 3, 3, 3, 3, 
    3, 3, 3, 3, 3, NA, NA, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
    NA), .Dim = c(14L, 4L), .Dimnames = list(c("2012-05-28", "2012-06-04", 
    "2012-06-11", "2012-06-18", "2012-06-25", "2012-07-02", "2012-07-09", 
    "2012-07-16", "2012-07-23", "2012-07-30", "2012-08-06", "2012-08-13", 
    "2012-08-20", "2012-08-27"), c("2012-07-30", "2012-08-06", "2012-08-13", 
    "2012-08-20")))

我不确定您是否只想删除9周以上的内容(这是我编写代码的目的),或者您是否还需要在将来删除内容(您必须修改代码才能这样做)。像这样的。。。您需要的不是
difweeks>=-9
而是类似于
difweeks>=-9&difweeks的内容,请更清楚地说明这一点。目前还不清楚你在问什么。请添加可复制的数据。我添加了更多的细节,这是否有助于您需要告诉我们,我们是否可以依靠NA的良好结构,如上图所示。
change_vector <- structure(c(1, 1, 1.5, 1), 
    .Names = c("2012-07-30", "2012-08-06", "2012-08-13", "2012-08-20"))
my_matrix <- structure(c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, NA, NA, NA, NA, 2, 
    2, 2, 2, 2, 2, 2, 2, 2, 2, 2, NA, NA, NA, 3, 3, 3, 3, 3, 3, 3, 
    3, 3, 3, 3, 3, NA, NA, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 
    NA), .Dim = c(14L, 4L), .Dimnames = list(c("2012-05-28", "2012-06-04", 
    "2012-06-11", "2012-06-18", "2012-06-25", "2012-07-02", "2012-07-09", 
    "2012-07-16", "2012-07-23", "2012-07-30", "2012-08-06", "2012-08-13", 
    "2012-08-20", "2012-08-27"), c("2012-07-30", "2012-08-06", "2012-08-13", 
    "2012-08-20")))
# calculate the difference in weeks between the matrix and vector dates
mdates <- as.Date(dimnames(my_matrix)[[1]])
vdates <- as.Date(names(change_vector))
difweeks <- outer(mdates, vdates, "-") / 7
# define a matrix that is 1 when the adjustment should be made, and 0 otherwise
adjonlyif <- 1*(difweeks >= -9)

# subtract 1 from the change vector
cv2 <- change_vector - 1

# multiply the adjusted change vector by the adjustment matrix, add 1, and multiply by the original matrix
my_matrix * (1 + t(t(adjonlyif) * cv2))
my_matrix * (1 + t(t(difweeks >= -9) * (change_vector - 1)))