有2个问题:
我试图在lubridate
中使用as. POSIXct()
或as.date()
转换时间,但总是在定义格式后获得NA
值。这是我使用的代码:
tt=as.POSIXct(FixUseNew$StartTimestamp, )
df$time <- as.Date(df$time, "%d-%m-%Y")
If I leave out the format and do the following :
tt=as.POSIXct(df$time)
tt
hour(tt)
现在的日期数据如下所示:"010-07-14 00:38:00 LMT"
我想使用聚合
函数来求和相同小时间隔或一天的降水,但无法做到这一点,因为我坚持使用日期格式。
只是一个脑残。我打算把日期因素改为字符,然后改为日期格式,如下所示。请告知这是不是个好主意。
df$time <-paste(substr(df$time,6,7),
substr(df$time,9,10),
substr(df$time,1,4),sep="/")
以下是数据的子集,希望这有助于更好地说明问题:
Id <- c(1,2,3,4)
Time <- c("10/7/2014 12:30:00 am", "10/7/2014 01:00:05 am","10/7/2014 01:30:10 am", "10/7/2014 02:00:15 am")
Precipitation <- c(0.06, 0.02,0,0.25)
cbind(Id, Time, Precipitation)
太谢谢你了。
结果如下:似乎顺序被扭曲了:
6 1/1/15 0:35 602
7 1/1/15 0:36 582
8 1/1/15 0:37 958
9 1/1/15 0:38 872
10 1/10/14 0:31 500
11 1/10/14 0:32 571
12 1/10/14 0:33 487
13 1/10/14 0:34 220
14 1/10/14 0:35 550
15 1/10/14 0:36 582
16 1/10/14 0:37 524
17 1/10/14 0:38 487
⋮
106 10/10/14 15:16 494
107 10/10/14 7:53 37
108 10/10/14 7:56 24
109 10/10/14 8:01 3
110 10/11/14 0:30 686
111 10/11/14 0:31 592
112 10/11/14 0:32 368
113 10/11/14 0:33 702
114 10/11/14 0:34 540
115 10/11/14 0:35 564
使用dplyr
和lubridate
包,我们可以从每个Time
和sum
中提取小时
。
library(dplyr)
library(lubridate)
df %>%
mutate(hour = hour(dmy_hms(Time))) %>%
group_by(hour) %>%
summarise(Precipitation = sum(Precipitation, na.rm = TRUE))
对于按日期聚合,我们可以做
df %>%
mutate(day = as.Date(dmy_hms(Time))) %>%
group_by(day) %>%
summarise(Precipitation = sum(Precipitation, na.rm = TRUE))
用R打底我们可以
df$Hour <- format(as.POSIXct(df$Time, format = "%d/%m/%Y %I:%M:%S %p"), "%H")
df$Day <- as.Date(as.POSIXct(df$Time, format = "%d/%m/%Y %I:%M:%S %p"))
#Aggregation by hour
aggregate(Precipitation~Hour, df, sum, na.rm = TRUE)
#Aggregation by date
aggregate(Precipitation~Day, df, sum, na.rm = TRUE)
编辑
根据最新的数据和信息,我们可以做
df <- readxl::read_xlsx("/path/to/file/df (1).xlsx")
hour_df <- df %>%
group_by(hour = hour(Time)) %>%
summarise(Precipitation = sum(Precipitation, na.rm = TRUE))
day_df <- df %>%
mutate(day = as.Date(Time)) %>%
group_by(day) %>%
summarise(Precipitation = sum(Precipitation, na.rm = TRUE))
所以hour_df
得到了每小时sum
的值,而没有考虑日期day_df得到了sum
的沉淀
的每一天。
数据
Id <- c(1,2,3,4)
Time <- c("10/7/2014 12:30:00 am", "10/7/2014 01:00:05 am",
"10/7/2014 01:30:10 am", "10/7/2014 02:00:15 am")
Precipitation <- c(0.06, 0.02,0,0.25)
df <- data.frame(Id, Time, Precipitation)