具有不等维度的矩阵的分组乘法

时间:2016-02-06 18:37:38

标签: r

我是R的新手并试图确定如何执行以下操作:

我有2个矩阵,每行是一个日期,每列都是一个数字。第二个矩阵比第一个矩阵长得多。我想创建一个函数,将第一行(比如它的1月号)乘以第2行矩阵的前4行(也都是1月号)。所以,我正在寻找4个结果。然后我想移动到第一个矩阵的第二行(二月号)并将它乘以第二个矩阵的2月4日数。最后,如果月份和年份匹配,我希望能够获得将第一个乘以第二个的代码。

First Matrix

Jan 2007        143.75
Feb 2007        140.93

第二张矩阵

2007-01-05         12.14
2007-01-12         10.15
2007-01-19         10.40
2007-01-26         11.13
2007-02-02         10.08
2007-02-09         11.10
2007-02-16         10.02
2007-02-23         10.58

2 个答案:

答案 0 :(得分:2)

假设这两个都是矩阵,并且左边的日期是行名,你可以尝试沿着这些行。这里我们匹配两个矩阵的行名称的月份,并使用它来为计算创建一个向量。

idx <- match(format(as.Date(rownames(m2)), "%b"), sub(" .*", "", rownames(m1)))
m2 * m1[idx]
#                [,1]
# 2007-01-05 1745.125
# 2007-01-12 1459.062
# 2007-01-19 1495.000
# 2007-01-26 1599.938
# 2007-02-02 1420.574
# 2007-02-09 1564.323
# 2007-02-16 1412.119
# 2007-02-23 1491.039

数据:

m1 <- structure(c(143.75, 140.93), .Dim = c(2L, 1L), .Dimnames = list(
    c("Jan 2007", "Feb 2007"), NULL))
m2 <- structure(c(12.14, 10.15, 10.4, 11.13, 10.08, 11.1, 10.02, 10.58
), .Dim = c(8L, 1L), .Dimnames = list(c("2007-01-05", "2007-01-12", 
"2007-01-19", "2007-01-26", "2007-02-02", "2007-02-09", "2007-02-16", 
"2007-02-23"), NULL))

注意:您没有在帖子中提供太多信息,例如您是否多年来一直这样做,日期是行名称还是列等等。如果您这样做多年,然后请发布一个更具代表性的数据示例和期望的结果。

答案 1 :(得分:0)

我们可以尝试

offsetof

数据

row.names(m2) <- format(as.Date(row.names(m2)), '%b %Y')
transform(merge(m1, m2, by = "row.names"), new = V1.x * V1.y)
#  Row.names   V1.x  V1.y      new
#1  Feb 2007 140.93 10.08 1420.574
#2  Feb 2007 140.93 11.10 1564.323
#3  Feb 2007 140.93 10.02 1412.119
#4  Feb 2007 140.93 10.58 1491.039
#5  Jan 2007 143.75 12.14 1745.125
#6  Jan 2007 143.75 10.15 1459.062
#7  Jan 2007 143.75 10.40 1495.000
#8  Jan 2007 143.75 11.13 1599.938