R tally()和n()在同一个链中

R tally()和n()在同一个链中,r,dplyr,R,Dplyr,我试图计算某个结果的概率(例如,值precip>=3),但不知道如何在同一个链中组合tally和n 这是可行的,但我不想依赖于numsim: numsim=2 simdF %>% group_by(iter) %>% tally( precip >= 3 ) %>% mutate( prob=n/numsim ) 为什么不: simdF %>% group_by(iter) %>%

我试图计算某个结果的概率(例如,值precip>=3),但不知道如何在同一个链中组合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))

查看
?计数的文档

tally
是一种方便的
summary
包装器,它将调用
n
sum(n)
,具体取决于

tally
调用summary,因此将其放在summary中是没有意义的。只需直接转到
n()
sum(n)
即可。在这种情况下,由于您有条件,请使用
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)

我很困惑。如果使用n(),第一个变种不会给出正确的答案;n()=3,因为tally()之后的dF有3行(我想?)。我的工作示例在函数中也不起作用-
未找到对象“precip\u lower\u bound”
。现在使用sum(precip>=3)是有意义的。感谢
n
n()
相反,在我的变异示例中,是否按组给你数字?我的错误是,我对
n
vs
n()
的评论是在我意识到
tally
添加了一个名为
n
的列之前。关于函数,我更新了我的函数示例,使其更加完整。感谢@Gregor,我想我正在努力,因为
n()
表示“n的长度”,而
sum(n)
表示“n的和”,这是两种不同的操作。我可以理解为什么它是这样编程的,以允许条件,但文档可以使用澄清。也许-我认为文档假设用户已经习惯于从base R开始使用,这可能是一个错误的假设。对布尔/逻辑表达式求和是计算满足条件次数的常用方法-在dplyr、base R、data table等中。