2016-08-18 29 views
-2

當我由R實現COUNTIF和SUMIF, 我總是用sapply功能和表函數是這樣的:有效的方法是如何實現SUMIF和COUNTIF R中

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

我們可以使用data.table來提高效率。將'data.frame'轉換爲'data.table'(setDT(df)),按'a'分組,我們得到'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

library(dplyr) 
df %>% 
    group_by(key = a) %>% 
    summarise(sum = sum(b), count = .N) 
相關問題