【发布时间】:2019-08-11 23:21:19
【问题描述】:
我确信有一种方法可以通过在循环中编写一个函数来做到这一点,但是 movavg() 函数正是我想要做的,我只是不知道如何在一个组中应用它数据框。
数据集很大,但我试图取几列(比如,
data <- c("Species", "Tonnes", "Year")
并将每个物种每年的所有行(吨)分组(每年每个物种将有数百行),然后计算连续 10 年的加权移动平均值。所以不是总结(平均=平均(吨)),我有
data %>%
group_by(Species, Year) %>%
summarise(wma = movavg(x = Tonnes, n = 9, type = "w"))
对于 movavg() 函数,x = 作为数值向量的时间序列,n = 后向窗口长度(所以我认为自从我有 10 年的数据以来是 9 年),类型为“w”表示加权移动平均线。但是我想不出一种有效的方法来让 x 和 n 引用分组变量。
任何帮助将不胜感激!
数据样本:
dput(sample)
structure(list(Species = c("Argyrosomus hololepidotus", "Argyrosomus hololepidotus",
"Argyrosomus hololepidotus", "Argyrosomus hololepidotus", "Argyrosomus hololepidotus",
"Argyrosomus hololepidotus", "Argyrosomus hololepidotus", "Argyrosomus hololepidotus",
"Argyrosomus hololepidotus", "Argyrosomus hololepidotus", "Argyrosomus hololepidotus",
"Dipturus batis", "Dipturus batis", "Dipturus batis", "Dipturus batis",
"Dipturus batis", "Dipturus batis", "Dipturus batis", "Dipturus batis",
"Dipturus batis", "Dipturus batis", "Dipturus batis", "Dipturus batis",
"Dipturus batis", "Dipturus batis", "Dipturus batis", "Dipturus batis",
"Epinephelus striatus", "Epinephelus striatus", "Epinephelus striatus",
"Epinephelus striatus", "Epinephelus striatus", "Epinephelus striatus",
"Epinephelus striatus", "Epinephelus striatus", "Epinephelus striatus",
"Epinephelus striatus", "Epinephelus striatus", "Epinephelus striatus",
"Leucoraja circularis", "Leucoraja circularis", "Leucoraja circularis",
"Leucoraja circularis", "Leucoraja circularis", "Leucoraja circularis",
"Leucoraja circularis", "Leucoraja circularis", "Leucoraja circularis",
"Leucoraja circularis", "Leucoraja circularis", "Leucoraja circularis",
"Leucoraja circularis", "Leucoraja circularis", "Leucoraja circularis",
"Leucoraja circularis", "Leucoraja circularis", "Leucoraja circularis",
"Leucoraja circularis", "Leucoraja circularis", "Leucoraja circularis",
"Leucoraja circularis", "Leucoraja circularis", "Leucoraja circularis",
"Leucoraja fullonica", "Leucoraja fullonica", "Leucoraja fullonica",
"Leucoraja fullonica", "Leucoraja fullonica", "Leucoraja fullonica",
"Leucoraja fullonica", "Leucoraja fullonica", "Leucoraja fullonica",
"Leucoraja fullonica", "Leucoraja fullonica", "Leucoraja fullonica",
"Leucoraja fullonica", "Leucoraja fullonica", "Leucoraja fullonica",
"Leucoraja fullonica", "Leucoraja fullonica", "Leucoraja fullonica",
"Leucoraja fullonica", "Leucoraja fullonica", "Leucoraja fullonica",
"Leucoraja fullonica", "Leucoraja fullonica", "Leucoraja fullonica"
), Year = c(2011, 2012, 2012, 2013, 2013, 2013, 2014, 2014, 2014,
2015, 2015, 2011, 2011, 2011, 2011, 2012, 2012, 2012, 2013, 2013,
2013, 2014, 2014, 2014, 2015, 2015, 2015, 2011, 2011, 2012, 2012,
2013, 2013, 2013, 2014, 2014, 2015, 2015, 2015, 2011, 2011, 2011,
2011, 2012, 2012, 2012, 2012, 2012, 2013, 2013, 2013, 2013, 2013,
2014, 2014, 2014, 2014, 2014, 2015, 2015, 2015, 2015, 2015, 2011,
2011, 2011, 2011, 2011, 2012, 2012, 2012, 2012, 2012, 2013, 2013,
2013, 2013, 2013, 2014, 2014, 2014, 2014, 2014, 2015, 2015, 2015,
2015), Country = c("Australia", "Australia", "Congo Rep", "Australia",
"Congo Rep", "Cuba", "Australia", "Congo Rep", "Cuba", "Australia",
"Congo Rep", "France", "Iceland", "Norway", "UK", "Iceland",
"Norway", "UK", "Iceland", "Norway", "UK", "Iceland", "Norway",
"UK", "France", "Norway", "UK", "Bahamas", "Cuba", "Bahamas",
"Cuba", "Bahamas", "Colombia", "Cuba", "Bahamas", "Cuba", "Bahamas",
"Colombia", "Cuba", "Belgium", "France", "Portugal", "Spain",
"Belgium", "France", "Portugal", "Spain", "UK", "Belgium", "France",
"Portugal", "Spain", "UK", "Belgium", "France", "Portugal", "Spain",
"UK", "Belgium", "France", "Portugal", "Spain", "UK", "France",
"Iceland", "Ireland", "Spain", "UK", "France", "Iceland", "Ireland",
"Spain", "UK", "France", "Iceland", "Ireland", "Spain", "UK",
"France", "Iceland", "Ireland", "Spain", "UK", "France", "Ireland",
"Spain", "UK"), Tonnes = c(106.05352, 156.34223, 126.58993, 186.88017,
99.93942, 2.11171, 141.38148, 76.62019, 1.05582, 139.68761, 68.84715,
1.01059, 122.28238, 51.54047, 1.01059, 146.53669, 21.22253, 4.04238,
154.62159, 16.16959, 1.01061, 221.32109, 13.4511, 1.01058, 0.10106,
11.40965, 1.48557, 123.76517, 31.19285, 75.46656, 26.16171, 92.57231,
0.20119, 13.08084, 148.92064, 25.15554, 53.32971, 0.20118, 25.15551,
121.27182, 45.47698, 41.43453, 38.40273, 127.33538, 55.58288,
31.32855, 21.22261, 4.04233, 102.07043, 59.62533, 30.31795, 11.11656,
27.28616, 85.90087, 82.86908, 29.30735, 5.05297, 38.40275, 110.25632,
60.06995, 21.18214, 3.52698, 44.86048, 184.93939, 17.18016, 8.08486,
60.63577, 90.9538, 171.80171, 21.22261, 7.07419, 56.59356, 62.65707,
158.66387, 37.39215, 3.03183, 32.33914, 85.90084, 169.78059,
14.1483, 2.02121, 18.19081, 55.58289, 195.41931, 2.99138, 12.89521,
26.33628)), class = c("grouped_df", "tbl_df", "tbl", "data.frame"
), row.names = c(NA, -87L), vars = c("Species", "Year"), drop = TRUE, indices = list(
0L, 1:2, 3:5, 6:8, 9:10, 11:14, 15:17, 18:20, 21:23, 24:26,
27:28, 29:30, 31:33, 34:35, 36:38, 39:42, 43:47, 48:52, 53:57,
58:62, 63:67, 68:72, 73:77, 78:82, 83:86), group_sizes = c(1L,
2L, 3L, 3L, 2L, 4L, 3L, 3L, 3L, 3L, 2L, 2L, 3L, 2L, 3L, 4L, 5L,
5L, 5L, 5L, 5L, 5L, 5L, 5L, 4L), biggest_group_size = 5L, labels = structure(list(
Species = c("Argyrosomus hololepidotus", "Argyrosomus hololepidotus",
"Argyrosomus hololepidotus", "Argyrosomus hololepidotus",
"Argyrosomus hololepidotus", "Dipturus batis", "Dipturus batis",
"Dipturus batis", "Dipturus batis", "Dipturus batis", "Epinephelus striatus",
"Epinephelus striatus", "Epinephelus striatus", "Epinephelus striatus",
"Epinephelus striatus", "Leucoraja circularis", "Leucoraja circularis",
"Leucoraja circularis", "Leucoraja circularis", "Leucoraja circularis",
"Leucoraja fullonica", "Leucoraja fullonica", "Leucoraja fullonica",
"Leucoraja fullonica", "Leucoraja fullonica"), Year = c(2011,
2012, 2013, 2014, 2015, 2011, 2012, 2013, 2014, 2015, 2011,
2012, 2013, 2014, 2015, 2011, 2012, 2013, 2014, 2015, 2011,
2012, 2013, 2014, 2015)), class = "data.frame", row.names = c(NA,
-25L), vars = c("Species", "Year"), drop = TRUE))
【问题讨论】:
-
你能提供
dput()的样本数据吗? -
当然,好点。另外我之前没有使用过 dput() - 非常有用,谢谢
-
我的回答没有解决您的问题吗?如果不是,你能告诉我为什么吗?