微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何使用日期/时间序列计算数据框中多列的汇总统计信息?

如何解决如何使用日期/时间序列计算数据框中多列的汇总统计信息?

我有一个数据框,其中第一列是日期/时间序列,其他 9 列是具有相关水温的站点。我想计算每列的每月汇总统计数据。我想要的汇总统计数据是每月平均值与 +/- sd 温度,每月时间比例 > 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","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,7,6)
c <- c(6,10,2)
# Join the variables to create a data frame
df <- data.frame(a,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),sd(.,b:c)

但我收到一个错误

Error: unexpected 'else' in:
"  summarise_each(funs( if(length(na.omit(.))>=15)
    mean(.,na.rm=TRUE) else"
>     b:c)
Error: unexpected ')' in "    b:c)"

有人可以帮我为我的时间序列数据制作一个漂亮的汇总统计表吗?

解决方法

使用 dplyr 汇总时最好将数据转为“长”格式。以下是一种让您入门的可能方法:

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))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。