R对我而言是新的,我正在使用(私人)数据集。
我有以下问题,我有很多时间序列:
2015-04-27 12:29:48
2015-04-27 12:31:48
2015-04-27 12:34:50
2015-04-27 12:50:43
2015-04-27 12:53:55
2015-04-28 00:00:00
2015-04-28 00:00:10
所有时间序列都有一个值:
Datetime value
2015-04-27 12:29:48 0.0
2015-04-27 12:31:48 0.0
2015-04-27 12:34:50 1.1
2015-04-27 12:50:43 45.0
2015-04-27 12:53:55 0.0
2015-04-28 00:00:00 1.0
2015-04-28 00:00:10 2.0
我想跳过所有的小时和分钟,并将它们总结如下:
Datetime value
2015-04-27 46.1
2015-04-28 3.0
我做的第一件事是改变列日期时间:
energy$datetime <- as.POSIXlt(energy$datetime)
我用汇总函数尝试了几个东西:
df %>% group_by(energy$datetime) %>% summarize (energy$newname(energy$value))
但那不起作用。
我也在互联网上阅读有竞争力的东西(例如:http://r.789695.n4.nabble.com/How-to-sum-and-group-data-by-DATE-in-data-frame-td903708.html),但它对我没有意义(是的,我是一个菜鸟)。
希望有人可以帮助我!
答案 0 :(得分:10)
使用as.Date()然后使用aggregate()。
energy$Date <- as.Date(energy$Datetime)
aggregate(energy$value, by=list(energy$Date), sum)
Emma对列名称提出了一个很好的观点。您可以使用以下代码保留聚合中的列名称。
aggregate(energy["value"], by=energy["Date"], sum)
答案 1 :(得分:2)
使用data.table
Test$Datetime <- as.Date(Test$Datetime)
DT<- data.table(Test )
DT[,sum(value),by = Datetime]
Datetime V1
1: 2015-04-27 46.1
2: 2015-04-28 3.0
答案 2 :(得分:2)
使用tidyverse,特别是lubridate和dplyr:
library(lubridate)
library(tidyverse)
set.seed(10)
df <- tibble(Datetime = sample(seq(as.POSIXct("2015-04-27"), as.POSIXct("2015-04-29"), by = "min"), 10),
value = sample(1:100, 10)) %>%
arrange(Datetime)
df
#> # A tibble: 10 x 2
#> Datetime value
#> <dttm> <int>
#> 1 2015-04-27 04:04:00 35
#> 2 2015-04-27 10:48:00 41
#> 3 2015-04-27 13:02:00 25
#> 4 2015-04-27 13:09:00 5
#> 5 2015-04-27 14:43:00 57
#> 6 2015-04-27 20:29:00 12
#> 7 2015-04-27 20:34:00 77
#> 8 2015-04-28 00:22:00 66
#> 9 2015-04-28 05:29:00 37
#> 10 2015-04-28 09:14:00 58
df %>%
mutate(date_col = date(Datetime)) %>%
group_by(date_col) %>%
summarize(value = sum(value))
#> # A tibble: 2 x 2
#> date_col value
#> <date> <int>
#> 1 2015-04-27 252
#> 2 2015-04-28 161
由reprex package(v0.2.0)于2018-08-01创建。
答案 3 :(得分:0)
你走在正确的道路上 - 试试:
summarise(newVal = sum(energy$value) )
总结电话。
df<- energy %>% group_by(datetime) %>% summarise(sum =sum(value)) )