r - 如何使用 NaN 将单个时间点标准误差列添加到数据框(24 小时时间点的一周平均值的 SE)
问题描述
我需要绘制小鼠体温图。在 7 天的时间里,我每 15 分钟收集一次数据点。我还计算了该图每个时间点的平均温度。下一步是计算每个平均温度的标准误差,同时考虑所有 7 天的温度读数。这是我正在使用的扩展数据的图像:
我还有一个单独的、浓缩的数据框,它是上面每个时间点 7 天的平均值的 mean_temp,因此在 24 小时的时间点中每个时间点只有一个温度读数。它有 96 行,仅包含 time 和 mean_temp24 列。
使用以下代码,我只能计算所有时间点的单个标准误差(我知道这是错误的,但我很想找到解决方案)。我也无法从浓缩的 24 小时数据集中计算标准误差,因为不存在整整 7 天的温度。
将三只小鼠的平均温度(7 天)列添加到数据框“df”中
df=cbind(df,"mean_temp"=rowMeans(df[,3:5],na.rm=TRUE))
尝试计算每个时间点的标准偏差,首先
times = unique(df$time)
实现每行单个标准误差的功能
for (current_time in times){
df$se=sd(df$mean_temp24, na.rm=T)/sqrt(3-1)
}
理想情况下,我最终会得到一个包含 96 行(每行 15 分钟间隔时间点)的 24 小时温度数据的数据框,其中的值是每个时间点的七个温度的平均值(图像中的“mean_temp”我的数据框)。我还将为标准误差增加一列,其中考虑了用于计算最终 24 小时数据集中平均温度的 7 个温度值。
对于未压缩到 24 小时的完整数据集中的每个时间点,实际输出是单个相同的 SE。
解决方案
使用 plyr 包中的 ddply。对于 dt 和 time 的每个唯一组合,都会调用函数 f:
f = function(x) {
n3 = length(which(!is.na(x[,3])))
n4 = length(which(!is.na(x[,4])))
n5 = length(which(!is.na(x[,5])))
data.frame(
mean3 = mean(x[,3], na.rm=TRUE),
mean4 = mean(x[,4], na.rm=TRUE),
mean5 = mean(x[,5], na.rm=TRUE),
se3 = sd(x[,3], na.rm=TRUE)/sqrt(n3),
se4 = sd(x[,4], na.rm=TRUE)/sqrt(n4),
se5 = sd(x[,5], na.rm=TRUE)/sqrt(n5)
)
}
ddply(df, .(dt,time), f)
推荐阅读
- python - 如何增加 NGINX 的超时时间?
- android - 如何将 firebase in-app-messaging-display api 的源代码导入我的 android 项目?
- pyspark - PySpark 过滤给出不一致的行为
- php - 根据php.net上的信息,关于windows上setlocale的问题和问题
- android - 如何使用换行内容检测更改的高度编辑文本
- django - 使用 Webpack 和 Django 设置
- apache-spark - 如何在 Spark SQL 中的 WITH 子句中缓存子查询结果
- wordpress - 是否有一行 cmd 可以使用 composer 在本地安装 wordpress?
- css - svg 文本到路径转换,无需 inkscape,插图画家
- node.js - Mongoose 中的深度 find() 查询