r - 如何使用日期/时间序列计算数据框中多列的摘要统计信息?
问题描述
我有一个数据框,其中第一列是日期/时间序列,其他 9 列是与水温相关的站点。我想计算每列的每月汇总统计信息。我想要的汇总统计数据是,+/- sd temp 的月平均值,每月时间比例 > 20C 和 23C,每月最高温度。这是我的数据的示例 df
# Create a, b, c, d variables
a <- c("06-25-20 08:00:00 AM","06-25-20 08:15:00 AM",
"06-25-20 08:30:00 AM","06-25-20 08:45:00 AM",
"07-25-20 08:45:00 AM", "07-25-20 08:45:00 AM",
"08-25-20 08:45:00 AM", "08-25-20 08:45:00 AM",
"09-25-20 08:45:00 AM","09-25-20 08:45:00 AM")
b <- c(4,5,8, "N/A", 4,5,"N/A",7,7,6)
c <- c(6,10,8, "N/A", 8,5,"N/A",8,7,2)
# Join the variables to create a data frame
df <- data.frame(a,b,c)
df$a = as.POSIXlt(df$a, format="%m-%d-%y%H:%M:%S", tz = 'EST')
我开始只是试图获得有效的每月平均值,但对于我的生活,我无法在不编写大量额外代码的情况下让表格也包含标准偏差和所有其他汇总统计信息。这是我用来表示意思的代码
Monthly_2020Temp = df %>%
group_by(a = format(as.Date(a), '%b-%Y')) %>%
summarise_each(funs( if(length(na.omit(.))>=15)
mean(., na.rm=TRUE) else NA_real_),
b:c)
这是我在添加标准偏差时尝试使用的代码
Monthly_2020Temp = df %>%
group_by(a = format(as.Date(a), '%b-%Y')) %>%
summarise_each(funs( if(length(na.omit(.))>=15)
mean(., na.rm=TRUE) else NA_real_), sd(., na.rm=TRUE) else NA_real_),
b:c)
但我得到一个错误
Error: unexpected 'else' in:
" summarise_each(funs( if(length(na.omit(.))>=15)
mean(., na.rm=TRUE) else NA_real_), sd(., na.rm=TRUE) else"
> b:c)
Error: unexpected ')' in " b:c)"
有人可以帮我为我的时间序列数据制作一张漂亮的汇总统计表吗?
解决方案
使用 dplyr summarise 时最好将数据转换为“长”格式。这是让您入门的一种可能方法:
df$b <- as.numeric(df$b)
df$c <- as.numeric(df$c)
df %>% pivot_longer(-c(a)) %>%
mutate(month = lubridate::month(a), year = lubridate::year(a)) %>%
group_by(month, year) %>%
summarize(avg = mean(value, na.rm = TRUE), sd = sd(value, na.rm = TRUE))
推荐阅读
- flutter - 尝试初始化 Hive 时出现奇怪的错误
- sql-server - 如何从特定模式(T SQL)中的所有表中删除特定的公共记录?
- javascript - 使用 JavaScript、HTML 和 CSS 突出显示单词
- c - 我的程序在调试时运行正确,但在调试结束时运行不正确
- excel - 与 Excel 相比,Python 中的数据透视表具有不同的格式
- javascript - webkitEnterFullScreen 与 requestFullscreen 浏览器可用性
- linux - 使用 linux 不会崩溃,而是像在 windows 中一样冻结
- c - 使用 OpenMP 减少数组会导致“未找到用户定义的减少”
- ssis - SSIS 无法更改项目保护级别以使用密码加密敏感数据
- javascript - MainTemplate.hooks.startup 已被删除(改用 RuntimeGlobals.startup)