在气候数据中查找每日最大变量的每个时间
Finding each time of daily max variable in climate data
我有一个多年的大型数据集,其中有几个变量,但我感兴趣的是风速和日期时间。我想在数据集中找到每天最大风速的时间。我有 Posixct 格式的每小时数据,其中 WS 作为数字,偶尔带有 NA。下面是一个简短的数据集,应该可以说明我的观点,但是我的 dateTime 并不是按小时计算的,但它提供了足够的样本。
dateTime <- seq(as.POSIXct("2011-01-01 00:00:00", tz = "GMT"),
as.POSIXct("2011-01-29 23:00:00", tz = "GMT"),
by = 60*24)
WS <- sample(0:20,1798,rep=TRUE)
WD <- sample(0:390,1798,rep=TRUE)
Temp <- sample(0:40,1798,rep=TRUE)
df <- data.frame(dateTime,WS,WD,Temp)
df$WS[WS>15] <- NA
我之前曾尝试创建一个只有 posix 日期(减去时间)的新列以允许天隔离,但是我尝试过的所有事情都只返回了一个带有日期和 WS 的缩短数据框(聚合、拆分、xts)。聚合只是一个没有这样做的,但是,它给了我 23:00:00 作为不正确的常数时间。
我看过 , https://stats.stackexchange.com/questions/7268/how-to-aggregate-by-minute-data-for-a-week-into-hourly-means 和其他人,但 none 已经回答了这个问题,或者解决方案没有返回理想的结果。
我需要将此分析的结果与另一个数据框进行比较,因此我需要数据集中每天出现最大风速的实际时间。我觉得有一个简单的解决方案,但是,这让我很沮丧。
一个dplyr
解决方案可能是:
library(dplyr)
df %>%
mutate(date = as.Date(dateTime)) %>%
left_join(
df %>%
mutate(date = as.Date(dateTime)) %>%
group_by(date) %>%
summarise(max_ws = max(WS, na.rm = TRUE)) %>%
ungroup(),
by = "date"
) %>%
select(-date)
# dateTime WS WD Temp max_ws
# 1 2011-01-01 00:00:00 NA 313 2 15
# 2 2011-01-01 00:24:00 7 376 1 15
# 3 2011-01-01 00:48:00 3 28 28 15
# 4 2011-01-01 01:12:00 15 262 24 15
# 5 2011-01-01 01:36:00 1 149 34 15
# 6 2011-01-01 02:00:00 4 319 33 15
# 7 2011-01-01 02:24:00 15 280 22 15
# 8 2011-01-01 02:48:00 NA 110 23 15
# 9 2011-01-01 03:12:00 12 93 15 15
# 10 2011-01-01 03:36:00 3 5 0 15
为了完整起见(并且因为我喜欢简洁的代码)这里是 "one-liner" 使用 data.table
:
library(data.table)
setDT(df)[, max.ws := max(WS, na.rm = TRUE), by = as.IDate(dateTime)][]
dateTime WS WD Temp max.ws
1: 2011-01-01 00:00:00 NA 293 22 15
2: 2011-01-01 00:24:00 15 55 14 15
3: 2011-01-01 00:48:00 NA 186 24 15
4: 2011-01-01 01:12:00 4 300 22 15
5: 2011-01-01 01:36:00 0 120 36 15
---
1734: 2011-01-29 21:12:00 12 249 5 15
1735: 2011-01-29 21:36:00 9 282 21 15
1736: 2011-01-29 22:00:00 12 238 6 15
1737: 2011-01-29 22:24:00 10 127 21 15
1738: 2011-01-29 22:48:00 13 297 0 15
Dee 要求:"I want to find the time of the max wind speed for every day in the data set."其他答案已经计算了每天的最大 (WS),但没有计算出发生在哪个小时。
所以我提出了以下与dyplr的解决方案:
library(dplyr)
set.seed(12345)
dateTime <- seq(as.POSIXct("2011-01-01 00:00:00", tz = "GMT"),
as.POSIXct("2011-01-29 23:00:00", tz = "GMT"),
by = 60*24)
WS <- sample(0:20,1738,rep=TRUE)
WD <- sample(0:390,1738,rep=TRUE)
Temp <- sample(0:40,1738,rep=TRUE)
df <- data.frame(dateTime,WS,WD,Temp)
df$WS[WS>15] <- NA
df %>%
group_by(Date = as.Date(dateTime)) %>%
mutate(Hour = hour(dateTime),
Hour_with_max_ws = Hour[which.max(WS)])
我想强调的是,如果有几个小时的最大风速相同(在下面的示例中:15),结果只会显示最大(WS)的第一个小时,尽管风速为 15在该日期的 0、3、4、21 和 22 时到达!所以你可能需要更具体的逻辑。
我有一个多年的大型数据集,其中有几个变量,但我感兴趣的是风速和日期时间。我想在数据集中找到每天最大风速的时间。我有 Posixct 格式的每小时数据,其中 WS 作为数字,偶尔带有 NA。下面是一个简短的数据集,应该可以说明我的观点,但是我的 dateTime 并不是按小时计算的,但它提供了足够的样本。
dateTime <- seq(as.POSIXct("2011-01-01 00:00:00", tz = "GMT"),
as.POSIXct("2011-01-29 23:00:00", tz = "GMT"),
by = 60*24)
WS <- sample(0:20,1798,rep=TRUE)
WD <- sample(0:390,1798,rep=TRUE)
Temp <- sample(0:40,1798,rep=TRUE)
df <- data.frame(dateTime,WS,WD,Temp)
df$WS[WS>15] <- NA
我之前曾尝试创建一个只有 posix 日期(减去时间)的新列以允许天隔离,但是我尝试过的所有事情都只返回了一个带有日期和 WS 的缩短数据框(聚合、拆分、xts)。聚合只是一个没有这样做的,但是,它给了我 23:00:00 作为不正确的常数时间。
我看过
我需要将此分析的结果与另一个数据框进行比较,因此我需要数据集中每天出现最大风速的实际时间。我觉得有一个简单的解决方案,但是,这让我很沮丧。
一个dplyr
解决方案可能是:
library(dplyr)
df %>%
mutate(date = as.Date(dateTime)) %>%
left_join(
df %>%
mutate(date = as.Date(dateTime)) %>%
group_by(date) %>%
summarise(max_ws = max(WS, na.rm = TRUE)) %>%
ungroup(),
by = "date"
) %>%
select(-date)
# dateTime WS WD Temp max_ws
# 1 2011-01-01 00:00:00 NA 313 2 15
# 2 2011-01-01 00:24:00 7 376 1 15
# 3 2011-01-01 00:48:00 3 28 28 15
# 4 2011-01-01 01:12:00 15 262 24 15
# 5 2011-01-01 01:36:00 1 149 34 15
# 6 2011-01-01 02:00:00 4 319 33 15
# 7 2011-01-01 02:24:00 15 280 22 15
# 8 2011-01-01 02:48:00 NA 110 23 15
# 9 2011-01-01 03:12:00 12 93 15 15
# 10 2011-01-01 03:36:00 3 5 0 15
为了完整起见(并且因为我喜欢简洁的代码)这里是 "one-liner" 使用 data.table
:
library(data.table)
setDT(df)[, max.ws := max(WS, na.rm = TRUE), by = as.IDate(dateTime)][]
dateTime WS WD Temp max.ws 1: 2011-01-01 00:00:00 NA 293 22 15 2: 2011-01-01 00:24:00 15 55 14 15 3: 2011-01-01 00:48:00 NA 186 24 15 4: 2011-01-01 01:12:00 4 300 22 15 5: 2011-01-01 01:36:00 0 120 36 15 --- 1734: 2011-01-29 21:12:00 12 249 5 15 1735: 2011-01-29 21:36:00 9 282 21 15 1736: 2011-01-29 22:00:00 12 238 6 15 1737: 2011-01-29 22:24:00 10 127 21 15 1738: 2011-01-29 22:48:00 13 297 0 15
Dee 要求:"I want to find the time of the max wind speed for every day in the data set."其他答案已经计算了每天的最大 (WS),但没有计算出发生在哪个小时。
所以我提出了以下与dyplr的解决方案:
library(dplyr)
set.seed(12345)
dateTime <- seq(as.POSIXct("2011-01-01 00:00:00", tz = "GMT"),
as.POSIXct("2011-01-29 23:00:00", tz = "GMT"),
by = 60*24)
WS <- sample(0:20,1738,rep=TRUE)
WD <- sample(0:390,1738,rep=TRUE)
Temp <- sample(0:40,1738,rep=TRUE)
df <- data.frame(dateTime,WS,WD,Temp)
df$WS[WS>15] <- NA
df %>%
group_by(Date = as.Date(dateTime)) %>%
mutate(Hour = hour(dateTime),
Hour_with_max_ws = Hour[which.max(WS)])
我想强调的是,如果有几个小时的最大风速相同(在下面的示例中:15),结果只会显示最大(WS)的第一个小时,尽管风速为 15在该日期的 0、3、4、21 和 22 时到达!所以你可能需要更具体的逻辑。