使用条件在 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)]
另一个使用 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)
我想知道如何在 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)]
另一个使用 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)