R tally()和n()在同一个链中
我试图计算某个结果的概率(例如,值precip>=3),但不知道如何在同一个链中组合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) %>%
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
vsn()
的评论是在我意识到tally
添加了一个名为n
的列之前。关于函数,我更新了我的函数示例,使其更加完整。感谢@Gregor,我想我正在努力,因为n()
表示“n的长度”,而sum(n)
表示“n的和”,这是两种不同的操作。我可以理解为什么它是这样编程的,以允许条件,但文档可以使用澄清。也许-我认为文档假设用户已经习惯于从base R开始使用,这可能是一个错误的假设。对布尔/逻辑表达式求和是计算满足条件次数的常用方法-在dplyr、base R、data table等中。