我环顾四周,但没有找到与我的问题相符的解决方案。
我有一个数据集(df1),每日河流流量读数,从1945年到1981年 - 所以它是一个非常大的数据集。
我想计算每个月,每年的平均流量。我可以使用数据透视表在Excel中执行此操作,但我想知道在R中是否会减少很多费用。
我的问题是双重的。首先,我无法将日期转换为实际日期格式(尽管尝试推荐代码),其次,一旦我对日期进行了排序,我不确定如何汇总每年的月平均值数据集。我对R很新 - 我一直在寻找可能的教程,但这个特殊问题似乎没有一个容易找到的解决方案。
所以,我的数据看起来像这样:
X1 X2
1 01/10/1945 0.835
2 02/10/1945 0.835
3 03/10/1945 0.835
4 04/10/1945 0.835
5 05/10/1945 0.835
6 06/10/1945 0.433
日期最初是字符格式,所以我使用代码
df1$X1<-as.Date(df1$X1,"%m/%d/%Y")
尝试将其转换为日期格式,但出于某种原因,它会不断变化,日期中存在一些差距:
8132 1968-05-01 4.163
8133 1968-06-01 4.134
8134 1968-07-01 1.464
8135 1968-08-01 1.682
8136 1968-09-01 1.036
8137 1968-10-01 0.564
8138 1968-11-01 0.575
8139 1968-12-01 0.547
8140 <NA> 10.590
8141 <NA> 16.760
8142 <NA> 3.879
8143 <NA> 11.410
日期以12组为单位显示,所以我假设问题与&#34;月&#34;有些混淆,但我尝试了几种不同的d / m组合/ Y并且它们都没有工作。
总而言之,
非常感谢,
我
答案 0 :(得分:2)
我建议使用Lubridate转换日期,然后使用dplyr来操作数据帧。查看您的数据,您的日期似乎是日/月/年(dmy with Lubridate)。
假设您的数据框名为df:
library(dplyr)
library(lubridate)
df <- mutate(df, X1 = dmy(X1),Year = year(X1), Month = month(X1))
df <- group_by(df, Month, Year)
df <- summarise(df, result = mean(X2) )
您甚至可以链接这些命令以缩短它们:
df <- df %>%
mutate( X1 = dmy(X1),Year = year(X1), Month = month(X1)) %>%
group_by(Month, Year) %>%
summarise(result = mean(X2) )
希望这有帮助。
答案 1 :(得分:1)
考虑在日期转换后使用基本函数aggregate()
:
df$X1 <- as.POSIXct(strptime(df$X1, "%m/%d/%Y")) # US BASED SHORT DATES
df$X1 <- as.POSIXct(strptime(df$X1, "%d/%m/%Y")) # NON-US BASED SHORT DATES
df$month <- as.numeric(format(df$X1, '%m'))
df$year <- as.numeric(format(df$X1, '%Y'))
aggdf <- aggregate(X2 ~ month + year, df, FUN=mean)
答案 2 :(得分:0)
rm(list = ls())
setwd('path')
df<-read.csv('path/*.csv')
flow<-df[,2]
dt<-ts(flow, frequency=12, start=c(1942,1))
Month <- factor(cycle(dt), levels = 1:12, labels = month.abb)
tmd<-tapply(dt, list(year = floor(time(dt)), month = Month), c)
write.csv(tmd, 'path/*.csv'