如何使用 date/time 系列计算数据框中多列的摘要统计信息?

How to calculate summary stats over multiple columns in a dataframe with date/time series?

我有一个数据框,其中第一列是 date/time 系列,其他 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", "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')

我开始只是试图获得有效的每月平均值,但对于我的生活来说,我无法让 table 也包括标准偏差,以及所有其他汇总统计数据而不做一堆额外的代码。这是我用于 mean

的代码
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)"

有人可以帮我为我的时间序列数据做一个漂亮的 table 摘要统计吗?

使用dplyr summarize时最好把数据变成“long”格式。下面是一种可能的入门方法:

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))
df$b <- as.numeric(df$b)
df$c <- as.numeric(df$c)

library(foqat)
statdf(df)
#  mean   sd min  25% 50% 75% max integrity
#b 5.75 1.49   4 4.75 5.5   7   8       0.8
#c 6.75 2.43   2 5.75 7.5   8  10       0.8