如何在R中实现sumif和countif的有效方法

时间:2016-08-18 10:27:43

标签: r countif sapply

当我通过R认识到countif和sumif时, 我总是像这样使用sapply-function和table-function:

symbol = letters[sample(1:3, 5, replace=TRUE)]
df=data.frame(a=symbol,
          b=seq_len(length(symbol)))


#sumif
summary=data.frame(key=unique(df$a))
summary$sum=sapply(
  seq_len(nrow(summary)),
  function(i) with(df, sum(df$b[a==summary$key[i]]))
)

#countif
countif = data.frame(
  key=names(table(df$a)),
  count=as.vector(table(df$a))
)

summary = merge(
  summary,
  countif,
  c("key")
)

有没有有效的方法?

1 个答案:

答案 0 :(得分:1)

我们可以使用data.table来提高效率。将'data.frame'转换为'data.table'(setDT(df)),按'a'分组,我们得到'{1}}'b'和元素数量sum )。

.N

或另一个选项是library(data.table) setDT(df)[, .(sum = sum(b), count = .N), .(key = a)] # key sum count #1: c 1 1 #2: a 6 2 #3: b 8 2

dplyr