【问题标题】:Aggregate with a start and end of date汇总日期的开始和结束
【发布时间】:2018-06-07 09:33:11
【问题描述】:

我是 R 新手,所以这可能很简单,但我还没有找到方法。 我正在尝试按天汇总我的温度数据,因此我有一年中每一天的平均温度。

这是我的数据和我制作的代码示例:

         Date    Qobs   Ptot  Fsol Temp    PE X

1     1956-11-01 0.001  14.0  -99  12.0   1.4 NA
2     1956-11-02 0.001   0.0  -99  13.5   1.5 NA
3     1956-11-03 0.001   0.0  -99  13.5   1.5 NA
4     1956-11-04 0.001   0.0  -99  13.0   1.4 NA
5     1956-11-05 0.001   0.0  -99  11.5   1.3 NA
6     1956-11-06 0.001   0.0  -99  11.0   1.2 NA
7     1956-11-07 0.001   2.0  -99  12.5   1.3 NA
8     1956-11-08 0.000   0.0  -99   5.0   0.7 NA
9     1956-11-09 0.000   0.5  -99   0.0   0.4 NA
10    1956-11-10 0.000   0.0  -99  -2.5   0.2 NA
11    1956-11-11 0.000   2.5  -99   5.5   0.8 NA
12    1956-11-12 0.000   0.0  -99   7.5   0.9 NA

reg_T=aggregate(x=tmp_data$Temp, by=list(j=format(tmp_data$Date, "%j")), mean)

但是正如您所见,我的数据不是从 1 月 1 日开始的,所以我的数据的第一天是 01/11,这使得以后汇总时变得复杂。 我如何聚合和定义 01/01 的开始并让它忘记我的数据的开始和结束,因为它们不是完整的年份?

谢谢!

dput()的数据:

df <- structure(list(Date = structure(c(-4809, -4808, -4807, -4806, -4805, -4804,
                                        -4803, -4802, -4801, -4800, -4799, -4798, -4797,
                                        -4796, -4795, -4794, -4793, -4792, -4791, -4790,
                                        -4789, -4788, -4787, -4786, -4785, -4784, -4783,
                                        -4782, -4781, -4780), class = "Date"),
                     Temp = c(12, 13.5, 13.5, 13, 11.5, 11, 12.5, 5, 0, -2.5, 5.5, 7.5,
                              1.5, 6, 14, 6, 0.5, 0.5, 4, 2, 9, -4.5, -11.5, -10, -4.5,
                              -2.5, -3.5, -1, -1.5, -7.5)),
                .Names = c("Date", "Temp"), row.names = c(NA, 30L), class = "data.frame")

【问题讨论】:

  • 换句话说,您感兴趣的只是月份?预期的输出应该是什么?
  • 我对一年中每天的平均温度很感兴趣,我需要这样的输出:` j x` 1 001 -1.015094340 2 002 -1.700000000 3 003 -0.883018868 4 004 -1.445283019 5 005 -2.356603774 6 006 -1.360377358 7 007 -1.941509434 8 008-39473584906 9 009-3.3943963584906 9 009-3.39439623580-3.224523584906 9 009 -3.394396230 010101010101010-3943962310 010-394528302 11 011-158302 11 011-158490101011-301012-4.089928302 11 011-1584901011-301012 -3 011-5.1584901011/1012-4.08867924512-4.088679245而不是 1/01。
  • 为什么不去group_by() 约会和summarise()?而不是使用aggregate

标签: r aggregate


【解决方案1】:

这样的事情怎么样:

require(tidyverse)

df %>% 
  mutate(MonthDay = str_sub(as.character(Date), 6)) %>% 
  group_by(MonthDay) %>% 
  summarise(MeanDay = mean(Temp, na.rm = TRUE))

    # A tibble: 30 x 2
   MonthDay MeanDay
   <chr>      <dbl>
 1 11-01      12.0 
 2 11-02      13.5 
 3 11-03      13.5 
 4 11-04      13.0 
 5 11-05      11.5 
 6 11-06      11.0 
 7 11-07      12.5 
 8 11-08       5.00
 9 11-09       0.  
10 11-10      -2.50
# ... with 20 more rows

【讨论】:

  • 但是,看来,我没有每个 1 月 1 日的平均温度,以及一年中剩下的每一天,抱歉我不清楚
  • 谢谢!看来我有问题,因为结果中保留了年份。变异是否适用于日期格式?
  • 请看我的编辑。在str_sub 下我将其更改为as.character(Date)。告诉我它是否适合你
  • 年份仍然保留在结果中,对于 mutate 的特定行我有这个错误: mutate_(.data, .dots = compat_as_lazy_dots(...)) 中的错误:参数“ .data" 丢失,没有默认值
  • 可以dput()你的文件吗?
猜你喜欢
  • 2022-07-13
  • 2012-08-19
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多