我是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
答案 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