簡體   English   中英

快速將“整理”的數據轉換為超越圖(又稱超越圖)的方法

[英]methods to quickly turn 'tidy' data into exceedance plots (aka exceedence plots)

我希望找到更好的方法來像這樣轉換“整潔”的數據幀:

在此處輸入圖片說明

變成如下所示的“超標圖”或“超標圖”(在水資源應用中通常用兩種方式拼寫),它們只是沿x軸對變量進行排序/排序。

這是我現在要做的冗長的方法:

(樣本數據):

library(tidyverse)

timestep <- c("a", "b", "c", "a", "b", "c", "a", "b", "c")
var <- c("x", "x", "x", "y", "y", "y", "z", "z", "z")
taf <- c(18,1,5,23,12,67,7,30,2)
df <- data.frame(timestep, var, taf)

建立一個新的數據框(我認為我需要嗎?):

df_a <- df %>% filter(var == "x") %>% arrange(desc(taf))
df_b <- df %>% filter(var == "y") %>% arrange(desc(taf)) 
df_c <- df %>% filter(var == "z") %>% arrange(desc(taf)) 

df_rank <- rbind(df_a, df_b, df_c)
ts_nums <- length(unique(timestep))

taf_var_rank <- rep(seq(ts_nums),ts_nums)
taf_var_rank_xaxis <- taf_var_rank/(ts_nums+1) #standard calc for xaxis
df_rank <- data.frame(df_rank, taf_var_rank, taf_var_rank_xaxis)

產生這個, df_rank

在此處輸入圖片說明

對於我這樣的情節的最終目標:

ggplot(df_rank, aes(x = taf_var_rank_xaxis, y = taf, color = var)) + geom_line() + 
labs(x = "probability of exceedance")

在此處輸入圖片說明

我對R(和編程)還很陌生,我想我可以構建一個通用函數,或者如果我很幸運,可以使用一個現有的庫/函數為我壓縮這個過程? 非常感謝您的幫助,因為我有一些變量很多的長時間序列。

歡呼聲,戴夫

看看您所做的,似乎並不需要創建那些單獨的data.frames。 您可以只使用大多數dplyr函數來執行相同的操作:

df %>% arrange(var, desc(taf)) %>% 
  group_by(var) %>% 
  mutate(taf_var_rank = row_number(),
         taf_var_rank_xaxis = taf_var_rank/(n()+1)) %>% 
  ggplot(aes(x = taf_var_rank_xaxis, y = taf, color = var)) + 
    geom_line() + 
    labs(x = "probability of exceedance")

暫無
暫無

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

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