【问题标题】:How do you efficiently subset data for charts (e.g., boxplots) in R?您如何有效地为 R 中的图表(例如箱线图)子集数据?
【发布时间】:2016-04-06 23:14:01
【问题描述】:

我对这个问题进行了相当多的研究,如果我错过了答案,我深表歉意,但我似乎无法找到特定于我的场景的答案。我想创建 2 个图表(针对每个级别的 Account:Dr 和 Cr),其中包含 6 个箱形图,每个都基于三列中的数据。数据与以下数据类似(假设有六个日期;01/01/2016-06/01/2016):

 Date         Days     Acct
 01/01/16     7        Cr  
 01/01/16     5        Dr  
 02/01/16     6        Cr 
 01/01/16     4        Dr
 02/01/16     6        Dr

让我们假设 1000 行只有 6 个唯一日期值和两个帐户值 - Cr 和 Dr。我将解释我为获取图表所做的工作,但我知道这不是最有效的方式,因为我目前正在使用 for 循环。

我将 Cr 数据分配给一个数据帧,然后将 Dr 数据分配给另一个数据帧。然后我将每个数据帧中的唯一日期值分配给新数据帧。之后,我运行一个 For 循环来为每个 Date 值创建一个数据框,并将 Day 值分配给每个值,如下所示:

01/01/2016 (Data Frame 1, col A)   
5                                   
7                                   
6

02/01/2016 (Data Frame 2, col A)
3
5

然后我运行 cbind.fill 将所有数据帧组合成一个有 6 列的数据框,其中 Date 是标题,Days 是行中的值。我在该数据框上运行箱线图。

感谢您的帮助!

【问题讨论】:

    标签: r boxplot


    【解决方案1】:

    好的,所以我希望我正确地解释了你的问题。您需要两个图表(每个帐户级别 1 个),每个图表应该有六个箱线图(每个日期一个框)。由于您的数据集不够大,无法用作示例,因此我创建了自己的数据集并展示了如何使用ggplot2 和基础R 制作箱线图。

    library(ggplot2)
    set.seed(123)
    date_vec = seq(as.Date('2016/1/1'), as.Date('2016/1/6'), by = 'day')
    df = data.frame(
      Date = sample(date_vec, 1000, replace = T),
      Days = rpois(1000, lambda = 2),
      Acct = sample(c('Dr','Cr'), 1000, replace = T),
      stringsAsFactors = FALSE
    )
            Date Days Acct
    1 2016-01-02    1   Dr
    2 2016-01-05    2   Dr
    3 2016-01-03    1   Dr
    4 2016-01-06    3   Cr
    5 2016-01-06    3   Dr
    6 2016-01-01    2   Cr
    

    您可以通过Acct 使用ggplot2facet_wrap

    ggplot(df, aes(x = factor(Date), y = Days))+
      geom_boxplot()+facet_wrap(~Acct)+theme_bw()+
      xlab('Date')
    

    或者,我们可以在基础R 中制作一个两面板箱线图:

    par(mfrow = c(1,2)) #plot both simultaneously
    with(subset(df, Acct == 'Cr'),
         boxplot(Days~Date, main = 'Cr Boxplots'))
    with(subset(df, Acct == 'Dr'),
         boxplot(Days~Date, main = 'Dr Boxplots'))
    

    显然,您需要使用 x 轴标签来获得更丰富的图表。我希望这会有所帮助。

    【讨论】:

    • 哇!显然,我仍然需要了解很多关于 R 的知识!谢谢,弹力球!我是否正确地认为网上没有太多关于这种情况的信息,或者我只是没有正确研究它?
    • 我认为,如果您花一些时间查看一些 R 函数,例如 withsubset*apply 函数类,它可能会对您有所帮助。当然,SO 也总是一个很好的资源!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-04
    • 1970-01-01
    • 2020-07-10
    • 1970-01-01
    相关资源
    最近更新 更多