我正在尝试编写一个函数来估计平均值周围的置信区间。 我想通过
wk
或使用 month
作为我的 pd
来估计间隔,但是,
经过一段时间的尝试后,我的所有 var
都得到了 NA,而且该函数还忽略了
wk
并仅由 month
返回。有人可以指出我做错了什么吗?
我应该在函数内部进行什么 group_by 才能在 wk
和 wk
之间切换
使用 month
功能?数据和代码如下:ci
x <- structure(list(wk = c(1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2,
2, 3, 3, 3, 3, 3, 3), month = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1), xd = c(0.0370098838217444, 0.0391215970961887,
0.0409865246890313, NA, NA, NA, NA, 0.015188, 0.007513, 0.012716,
0.013962, 0.014259, 0.023553, 0.032122, 0.03953, 0.028946, 0.030769,
0.030815, 0.029187, 0.022604), td = c(0.02701157274146, 0.0284158620689655,
0.0296560389182058, NA, NA, NA, NA, 0.0125, 0.007396, 0.010856,
0.011685, 0.011882, 0.018063, 0.023761, 0.028687, 0.021649, 0.022861,
0.022892, 0.021809, 0.017432), pd = c(317.308439683869, 0, 126.719553152898,
NA, NA, NA, NA, 2671.6, 3540.6976744186, 1270.35740604274, 1067.69362430466,
688.099646524154, 317.444499806234, 420.941879550524, 280.475476696762,
250.681324772507, 159.048160622895, 258.125109208457, 450.868907331836,
0), year = c(2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007,
2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007, 2007,
2007)), class = "data.frame", row.names = c(NA, -20L))
x
library(tidyverse)
ci <- function(dat, by, var, conf.int = 0.90,...) {
dat <- na.omit(dat)
dat %>%
group_by(wk) %>% #Should I group by wk here?
do(data.frame(rbind(smean.cl.normal(.$var, conf.int = conf.int))))
}
ci(dat = x, by = month, var = pd) # Returns NAs
代替
summarise
,然后使用 do
。并且您需要将“by”参数放在大括号中。您也不需要省略 NA,因为 unnest_wider
默认情况下会省略它们。smean.cl.normal
ci <- function(dat, by, var, conf.int = 0.90,...) {
#dat <- na.omit(dat)
dat %>%
group_by({{by}}) %>%
dplyr::summarise(mean=list(smean.cl.normal({{var}}, conf.int = conf.int))) %>%
unnest_wider(mean)
}
ci(dat = x, by = month, var = pd)