R 在气候数据中查找每日最大变量的每个时间

R 在气候数据中查找每日最大变量的每个时间,r,max,posix,R,Max,Posix,我有一个多年的大型数据集,其中有几个变量,但我感兴趣的是风速和日期时间。我想在数据集中找到每天最大风速的时间。我有Posixct格式的每小时数据,WS是一个数字,偶尔有NAs。下面是一个简短的数据集,希望能说明我的观点,但是我的dateTime不是每小时一次的数据,但它提供了足够的示例 dateTime <- seq(as.POSIXct("2011-01-01 00:00:00", tz = "GMT"), as.POSIXct("2011-01-29 23:00

我有一个多年的大型数据集,其中有几个变量,但我感兴趣的是风速和日期时间。我想在数据集中找到每天最大风速的时间。我有Posixct格式的每小时数据,WS是一个数字,偶尔有NAs。下面是一个简短的数据集,希望能说明我的观点,但是我的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

dateTimeA
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

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

为了完整性(并且因为我喜欢简洁的代码),这里有一个使用
数据的“一行程序”。表

library(data.table)
setDT(df)[, max.ws := max(WS, na.rm = TRUE), by = as.IDate(dateTime)][]

为了完整性(并且因为我喜欢简洁的代码),这里有一个使用
数据的“一行程序”。表

library(data.table)
setDT(df)[, max.ws := max(WS, na.rm = TRUE), by = as.IDate(dateTime)][]
迪伊问:“我想在数据集中找出每天最大风速的时间。”其他答案计算了每天的最大风速,但没有计算出发生的时间

因此,我建议使用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)])
库(dplyr)
种子集(12345)
dateTimeDee问:“我想在数据集中找到每天最大风速的时间。”其他答案计算了每天的最大风速,但没有计算出发生的时间

因此,我建议使用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)])
库(dplyr)
种子集(12345)

dateTime Hi@Kevin Arseneau我在样本数据上尝试了它,得到一个错误
by
不能包含RHS中缺少的联接列
date
。有解决方法吗?@Dee,检查你正在运行的代码。当我从你的问题中运行代码时,紧接着是我的问题,没有错误。我想你一定错过了什么,我的
mutate
语句在
left\u join
中为右侧(RHS)创建了
date
列。你好@Kevin Arseneau。我关闭了R并重新启动。它起作用了。如果所有其他操作都失败,则重新启动帮助…:)谢谢你好@Kevin Arseneau我在样本数据上尝试了它,得到了一个错误
by
不能包含RHS中缺少的联接列
date
。有解决方法吗?@Dee,检查你正在运行的代码。当我从你的问题中运行代码时,紧接着是我的问题,没有错误。我想你一定错过了什么,我的
mutate
语句在
left\u join
中为右侧(RHS)创建了
date
列。你好@Kevin Arseneau。我关闭了R并重新启动。它起作用了。如果所有其他操作都失败,则重新启动帮助…:)谢谢谢谢你,塞缪尔。我希望,因为我的观测数据已从km h-1转换为m s-1,它将足够独特,可以用于这项练习。我希望,因为我的观测数据已经从KmH-1转换为MS1,它对于这个练习来说足够独特,这要感谢简短的代码。它看起来很优雅。我将在我的数据上试用它,看看结果如何。谢谢你的简短代码。它看起来很优雅。我将在我的数据上试用,看看结果如何。