簡體   English   中英

Label 時間最小值和最大值出現在 R dataframe

[英]Label time of day min and max values occur in R dataframe

我有一個時間序列數據 (Q),我想創建一個列(類別),分別用標簽 Min 和 Max 標記每天出現的最小 Q 和最大 Q。 下面的代碼標識一天中出現最小值 (Time_of_min_Q) 和最大值 (Time_of_max_Q) 的時間。 我使用相同的技術添加相應的標簽,但它不起作用。 感謝您的建議。

library(dplyr)
set.seed(12345)
dateTime <- seq(as.POSIXct("2005-01-01 00:00:00", tz = "GMT"),
                as.POSIXct("2005-01-03 00:00:00", tz = "GMT"),
                by = 60*15)
Q <- sample(100:395,193,rep=TRUE)
df <- data.frame(dateTime,Q)
df$Time<-format(as.POSIXct(dateTime), format = "%H:%M:%S")

df1<-df %>% 
  group_by(Date = as.Date(dateTime)) %>% 
  mutate(Time_of_max_Q = Time[which.max(Q)],
         Time_of_min_Q = Time[which.min(Q)],
         Category = ifelse(Time[which.max(Q)],"Max",
                           ifelse(Time[which.min(Q)],"Min",NA)))

ifelse中的條件不符合邏輯。 它可以用==創建為邏輯。 根據?ifelse

test - 一個 object 可以強制進入邏輯模式。

library(dplyr)
df %>% 
  group_by(Date = as.Date(dateTime)) %>% 
  mutate(Time_of_max_Q = Time[which.max(Q)],
         Time_of_min_Q = Time[which.min(Q)],
         Category = ifelse(Q== max(Q),"Max",
                           ifelse(Q == min(Q),"Min",NA))) %>%  
  ungroup

如果max/min有關系,則對Time進行子集化( which.max/which.min返回第一個max/min的索引)並使用==與原始“時間”列

df %>% 
  group_by(Date = as.Date(dateTime)) %>% 
  mutate(Time_of_max_Q = Time[which.max(Q)],
         Time_of_min_Q = Time[which.min(Q)],
         Category = ifelse(Time[which.max(Q)] == Time,"Max",
                           ifelse(Time[which.min(Q)] == Time,"Min",NA)))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM