得到两列产品的总和

时间:2016-09-12 02:12:17

标签: r

有人可以解释我对以下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

2 个答案:

答案 0 :(得分:3)

我们可以使用Reduce获取rowwise产品,然后执行sum

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

或者正如评论中提到的@eipi一样,使用{}也可以正常工作

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

do(来自@thelatemail)

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

答案 1 :(得分:1)

我认为一个简短的例子解释了这里发生了什么,即使我不知道为什么它出现在底层代码中:

将整个数据集传递给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 +和(1:3 * 1:3)= 12 + 14

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