【问题标题】:methods to quickly turn 'tidy' data into exceedance plots (aka exceedence plots)快速将“整洁”数据转换为超越图(又名超越图)的方法
【发布时间】:2018-03-30 18:06:49
【问题描述】:

我希望找到更好的方法来转换这样的“整洁”数据框:

进入如下所示的“超越图”或“超越图”(在水资源应用中通常以两种方式拼写),它只是沿 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(和编程)很陌生,我想我可以构建一个通用函数,或者如果我幸运的话,有一个现有的库/函数可以为我压缩这个过程?非常感谢任何帮助,因为我有一些包含许多变量的长时间序列。

干杯,戴夫

【问题讨论】:

    标签: r ggplot2 dplyr tidyverse


    【解决方案1】:

    看看你做了什么,看起来你不需要制作那些单独的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")
    

    【讨论】:

    • 完美! row_number()n() 对我来说是新的,我可能永远不会意识到 row_number() 可以以非文字方式使用,阅读 group_by 的组。谢谢弗利克先生!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-22
    • 1970-01-01
    • 2014-09-21
    相关资源
    最近更新 更多