2017-08-02 49 views
1

我知道什麼時候做一個group_by我可以summarise和計算頻率,總和,平均數,中位數,標準等我想知道如果總結我可以計算概率分配。例如。是否有可能計算一個分佈,同時做一組通過在R

dat%>%group_by(A, B)%>%summarise(C_dist = density(C)) 

我試過在r。但我得到以下錯誤。

Error in summarise_impl(.data, dots) : 
    Evaluation error: need at least 2 points to select a bandwidth automatically. 

我在列中沒有任何缺失值。

+3

您的任何團隊是否只有一個條目?嘗試總結(freq = n()) –

+0

是的。其中一些人有單一入境。我可以忽略它們。但是,密度又不是一個單一的值。我如何將它存儲在數據框中? – deepAgrawal

回答

1

我寧願使用tapply()

tryCatch位可確保當一個組只有一個成員,NA返回,而不是整個事情停止。

set.seed(1) 
n <- 20 
dtf <- data.frame(d=runif(n), 
       g1=sample(1:3, n, replace=TRUE), 
       g2=sample(c("A", "B"), n, replace=TRUE)) 

agg <- with(dtf, 
     tapply(d, list(g1, g2), 
     FUN=function(x) { 
      tryCatch(density(x), error=function(e) NA) 
     })) 

str(agg) 
agg[["2", "A"]] 
# Call: 
# density.default(x = x) 

# Data: x (3 obs.); Bandwidth 'bw' = 0.1733 

#  x     y   
# Min. :-0.2543 Min. :0.008613 
# 1st Qu.: 0.1663 1st Qu.:0.156751 
# Median : 0.5869 Median :0.699978 
# Mean : 0.5869 Mean :0.593340 
# 3rd Qu.: 1.0074 3rd Qu.:0.902087 
# Max. : 1.4280 Max. :1.199607 
+0

謝謝。這將工作。它如何在大數據集上擴展?你認爲不是創建一個agg的矩陣,而應該把它歸爲(g1,g2,density)?如果我想將它推廣到多個變量,例如d1,d2 ...我可以在一個電話中完成嗎? – deepAgrawal

+0

我不知道,這一秒我才提出來。你可以嘗試逐漸增加'n'和組的數量,看看會發生什麼。 – AkselA

+0

我相信這種方法一次只適用於一個變量。一種選擇是把它放在一個循環中並循環變量。那麼你最終會列出清單列表,可能有點笨拙。 – AkselA

相關問題