使用条件在 R 中求和

Finding the sum in R using conditions

我想知道如何在 R 中进行条件求和。假设我只想要 2012 年商店 ID = 111111 的总和。我该怎么做?

YEAR       STORE ID       AMOUNT
2011       111111         11
2011       222222         12
2012       111111         4 
2012       222222         4 
2012       111111         45
2012       333333         7

您可以对 data.frame 进行子集化,然后对结果列求和。调用 data.frame mydf

sum(mydf[ mydf$'STORE ID' == 111111 & mydf$YEAR == 2012, 3])

在以下情况下使用 data.table 包的解决方案:

require(data.table)
setkey(dt, YEAR, STORE_ID)[.(2012, 111111), sum(AMOUNT)]

我们首先 setkey() 根据提供的列按递增顺序对 data.table 进行排序,并将这些列标记为已排序,以便我们可以使用 *fast binary search based joins,我们在.(2012, 111111) 的下一步使用二进制搜索在第一个键列中查找 2012 = YEAR 和在第二个键列中查找 111111 = STORE_ID。在这些行上,我们计算列 AMOUNT.

的总和

您也可以使用典型的基本 R 方式(使用向量扫描而不是二进制搜索):

dt[YEAR == 2012 & STORE_ID == 1, sum(AMOUNT)]

另一个使用 dplyrmagrittr 包的解决方案:

library(dplyr)
library(magrittr)

y <- data_frame(YEAR = c(2011, 2011, 2012, 2012, 2012, 2012), 
                STORE_ID = c(1, 2, 1, 2, 1, 3), AMOUNT = c(11, 12, 4, 4, 45, 7))

y %>% filter(YEAR == 2012, STORE_ID == 1) %$% sum(AMOUNT)