当我通过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")
)
有没有有效的方法?
答案 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