使用条件在R中求和

时间:2015-01-06 02:50:32

标签: r sum rstudio

我想知道如何在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

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

使用data.table包的解决方案:

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

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

您也可以使用典型的基本R方式(使用向量扫描而不是二分查找):

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

答案 2 :(得分:1)

使用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)