我有一個時間序列的資料(Q),并想創建一個列(類別),分別用標簽 Min 和 Max 標記 min Q 和 max 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)))
uj5u.com熱心網友回復:
中的條件ifelse不合邏輯。它可以被創建為合乎邏輯的==。根據?ifelse
test - 可以強制轉換為邏輯模式的物件。
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)))
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/432487.html
