簡體   English   中英

得到兩列乘積的和

[英]get sum of the product of two columns

有人可以解釋我下面的R功能的操作順序是錯誤的嗎? 我希望在每一行上相乘然后求和,但是得到的答案卻大不相同。

qqq<-data.frame(c(1,2,3),c(4,5,6))
library(dplyr)
qqq%>%sum(.[,1]*.[,2]) #returns: 53

# answer I expected: 1*4+2*5+3*6 = 32

我們可以使用Reduce來獲得按行乘積,然后sum

qqq %>%
     Reduce(`*`, .) %>%
     sum
#[1] 32

或正如評論中提到的@eipi一樣,使用{}也可以

qqq %>%
   {.[,1]*.[,2]} %>%
   sum

或與do (來自@thelatemail)

qqq %>% 
    do(.[1]*.[2]) %>%
    sum

我認為有一個簡短的示例說明了這里發生的事情,即使我不知道為什么它會在基礎代碼方面發生:

整個數據集將傳遞給sum操作,然后與sum操作中的表達式一起sum

在最簡單的示例中等於sum(data.frame(1:3))

data.frame(1:3) %>% sum()
#[1] 6

然后6 + 6:

data.frame(1:3) %>% sum(.[1])
#[1] 12

現在,在輸入數據集的總和之下為12,因此結果為12 + 6:

data.frame(1:3,1:3) %>% sum(.[1])
#[1] 18

將兩列相加后得出12 + 6 + 6:

data.frame(1:3,1:3) %>% sum(.[1],.[2])
#[1] 24

加一個乘法得到12 + sum(1:3 * 1:3)= 12 + 14

data.frame(1:3,1:3) %>% sum(.[1]*.[2])
#[1] 26

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM