我想知道如何在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
答案 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)
使用dplyr
和magrittr
包的另一种解决方案:
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)