如何解决如何编写在时间序列中循环的r代码?
我有一个两列的数据集,年份和温度。
Year Temperature
1869 51.4
1870 53.6
1871 51.1
1872 51.0
1873 51.0
1874 51.3
1875 49.4
1876 51.9
1877 52.8
1878 53.6
1879 52.3
1880 53.2
1881 52.4
1882 52.0
1883 50.5
1884 52.4
1885 51.1
1886 51.0
1887 50.9
1887 49.3
我需要编写一个r脚本来计算每年的平均变化百分比,绘制并打印输出以及原始数据。
例如1873年的平均百分比变化=((1874年至1878年的平均值-1869年至1873年的平均值)/ 1874年至1878年的平均值)* 100 我需要在1874年至1884年重复此操作,将其打印在一个csv文件中,并与原始数据一起绘制为时间序列。
我不确定从这里开始,欢迎任何想法或建议。
解决方法
使用库(动物园)我们可以做
l = rollmean(head(x,-5)[,2],5)
r = rollmean(tail(x,5)
percent_change = 100 * (r-l)/r
# [1] 0.3474903 0.7692308 3.7907506 3.6700719 2.6944972 0.5376344 0.1919386 -2.0897833 -2.8404669
#[10] -2.9699101 -2.2379270
数据:
x = structure(list(Year = c(1869,1870,1871,1872,1873,1874,1875,1876,1877,1878,1879,1880,1881,1882,1883,1884,1885,1886,1887,1887),Temp = c(51.4,53.6,51.1,51,51.3,49.4,51.9,52.8,52.3,53.2,52.4,52,50.5,50.9,49.3)),class = "data.frame",row.names = c(NA,-20L))
,
开始时,您需要计算每5年周期的平均温度。您可以使用embed()
和rowMeans()
来做到这一点:
x <- c(51.4,51.0,52.0,49.3)
M <- embed(x)
M
# [,1] [,2] [,3] [,4] [,5]
# [1,] 51.0 51.0 51.1 53.6 51.4
# [2,] 51.3 51.0 51.0 51.1 53.6
# [3,] 49.4 51.3 51.0 51.0 51.1
# [4,] 51.9 49.4 51.3 51.0 51.0
# [5,] 52.8 51.9 49.4 51.3 51.0
# [6,] 53.6 52.8 51.9 49.4 51.3
# [7,] 52.3 53.6 52.8 51.9 49.4
# [8,] 53.2 52.3 53.6 52.8 51.9
# [9,] 52.4 53.2 52.3 53.6 52.8
#[10,] 52.0 52.4 53.2 52.3 53.6
#[11,] 50.5 52.0 52.4 53.2 52.3
#[12,] 52.4 50.5 52.0 52.4 53.2
#[13,] 51.1 52.4 50.5 52.0 52.4
#[14,] 51.0 51.1 52.4 50.5 52.0
#[15,] 50.9 51.0 51.1 52.4 50.5
#[16,] 49.3 50.9 51.0 51.1 52.4
means <- rowMeans(M)
means
# [1] 51.62 51.60 50.76 50.92 51.28 51.80 52.00 52.76 52.86 52.70 52.08 52.10
#[13] 51.68 51.40 51.18 50.94
这是1969-1973年至1984-1988年的16种均值。您可以像这样计算1973年至1983年之间的年百分比变化:
changes <- 100 * (means[6:16] - means[1:11]) / means[6:16]
changes
# [1] 0.3474903 0.7692308 3.7907506 3.6700719 2.6944972 0.5376344
# [7] 0.1919386 -2.0897833 -2.8404669 -2.9699101 -2.2379270
在将changes
(11个元素)添加到数据框(20行)之前,您需要使用NA
对其进行填充,以使年份对齐:
changes <- c(rep(NA,4),changes,rep(NA,5))
您可以运行?plot
和?write.csv
以获取有关将数据帧绘制和保存为.csv
的帮助。
这是温度变化百分比的数据集。它使用data.table。如果您有经验,建议将ggplot用于图表。
df2 <- data.frame(Year =c(1869,Temperature = c(51.4,49.3))
df2 <- as.data.table(df2)
mean_df <- df2[,mean_temp := mean(Temperature),by =c("Year")]
mean_df <- unique(mean_df,by=c("Year","mean_temp"))
temperature_change <- mean_df[,temp_change := (mean_temp/shift(mean_temp,1L,type="lag"))*100-100]
temperature_change$Temperature <- NULL
df3 <- merge(df2,temperature_change,"mean_temp"),all=T)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。