2015-10-30 27 views
0

我試圖計算某個結果的概率(例如值> = 3),但不知道如何將tally和n結合在同一個鏈中。tally()和n()在同一個鏈中

這個工作,但我想不是靠numsim

numsim=2 
simdF %>% 
    group_by(iter) %>% 
    tally(precip >= 3) %>% 
    mutate(
      prob=n/numsim 
    ) 

爲什麼不:

simdF %>% 
    group_by(iter) %>% 
    summarise(
     freq=tally(precip >= 3), 
     prob=freq/n() 
) 


    ) 

和關於這一點,我怎樣才能使3是一個參數傳遞給函數包含此塊?

謝謝!

樣本數據:

simdF=structure(list(nsim = c(1,2,1,2,1,2), iter = c(5, 5,10, 10, 30, 30), locE = c(-1, -2, -2, -1, 0, 4), locN = c(-1, 4, -2, -3, 0, 2), precip = c(1.4142135623731, 4.47213595499958, 2.82842712474619, 3.16227766016838, 0, 4.47213595499958)), .Names = c("nsim", "iter", "locE", "locN", "precip"), class = c("tbl_df", "data.frame"), row.names = c(NA, -6L)) 

回答

2

望着文檔?tally

tallysummarise一個方便的包裝,將透過電話nsum(n)取決於...

tally調用總結,所以把放在裏面總結一下沒有意義。只要直接去n()sum(n)tally會。在這種情況下,因爲你有一個條件,使用sum

simdF %>% 
    group_by(iter) %>% 
    summarise(
     freq = sum(precip >= 3), 
     prob = freq/n() 
    ) 

至於

我怎麼能做出3是一個參數,包含此塊

的功能同樣的方式,你會做出任何論點:

your_function = function(data, precip_lower_bound = 3) { 
    data %>% 
     group_by(iter) %>% 
     summarise(
      freq = sum(precip >= precip_lower_bound), 
      prob = freq/n() 
     ) 
} 

your_function(data = simdF, precip_lower_bound = 3) 
+0

我很困惑。如果你使用n(),第一個mutate不會給你正確的答案。 n()= 3,因爲tally()之後的dF有3行(我認爲?)。我的工作示例在函數'對象'precip_lower_bound'未找到'中也不起作用。使用sum(precipitation> = 3)現在有意義。謝謝 – Dominik

+0

在我的mutate例子中用'n'與'n()'相對嗎? – Dominik

+0

我的錯誤是,我對'n'和'n()'的評論是在我意識到'tally'添加了一個名爲'n'的列之前。至於函數,我更新了我的函數示例,使其更加完整。 – Gregor