首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:按名称按矩阵乘向量

R:按名称按矩阵乘向量
EN

Stack Overflow用户
提问于 2017-10-16 23:13:13
回答 1查看 1.2K关注 0票数 2

我看过一些关于矩阵乘法的答案(如R: matrix by vector multiplication),但仍然找不到对我的问题的答案:

我卖四种水果,每种水果的价格都是这样的:

代码语言:javascript
复制
prices <- c(2.25, 0.42, 0.85, 1.24)
names(prices) <- c("pomegranate", "banana", "apple", "mango")

> prices
pomegranate      banana       apple       mango 
       2.25        0.42        0.85        1.24 

下表列出了一周中每一天售出的每件物品的数量:

代码语言:javascript
复制
vv <- c(43, 87, 48,  90,  99,  60,   1,  62,  62, 107,  34,  10, 130,  15,   5, 124, 124, 101,  22, 104)
M <- matrix(vv, nrow=4, ncol=5, dimnames=list(c("banana", "mango", "pomegranate", "apple"), c("M", "Tu", "W", "Th", "F")))

> M
             M Tu   W  Th   F
banana      43 99  62 130 124
mango       87 60 107  15 101
pomegranate 48  1  34   5  22
apple       90 62  10 124 104

请注意,矩阵的行与价格向量的顺序不同。

我想为我每天的收入创造一个向量,即:

代码语言:javascript
复制
> dailyrevenue
     M     Tu      W     Th      F 
310.44 170.93 243.72 189.85 315.22

有什么快速的方法可以告诉R将每个价格乘以其相应的行名吗?标准的乘法形式将假定每根香蕉的价格是2.25美元,而不是正确的数量0.42美元。

为了得到我想要的,我可以使用以下代码:

代码语言:javascript
复制
OrderOfPrices <- order(match(names(prices), rownames(M))) # per https://stackoverflow.com/a/2117080/8436923
r.prices      <- prices[OrderOfPrices]
dailyrevenue  <- colSums(r.prices * M)

我也不介意使用%*%crossprod (返回1行矩阵而不是向量),如果我可以避免调用order函数的话。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-16 23:26:06

您可以使用subsetting来按正确的顺序创建价格向量:

代码语言:javascript
复制
pricesm <- prices[rownames(M)]
pricesm
#banana       mango pomegranate       apple 
#  0.42        1.24        2.25        0.85 

rev <- pricesm %*% M
rev
#          M     Tu      W     Th      F
#[1,] 310.44 170.93 243.72 189.85 315.22
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46780309

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档