【问题标题】:display frequency of a date range in a bar chart在条形图中显示日期范围的频率
【发布时间】:2012-12-05 21:37:20
【问题描述】:

我有一个非常大的数据框,其中包含如下数据:

  PENR     ANFDAT     ENDDAT
1 1110 1990-02-01 1998-10-29
2 1981 1998-02-19 1998-02-20
3 6317 1994-11-01 1999-06-30
4 2039 1998-12-01 1999-04-30

(从这里获取)

df <- structure(list(PENR = c(1110L, 1981L, 6317L, 2039L), ANFDAT = structure(c(7336, 10276, 9070, 10561), class = "Date"), ENDDAT = structure(c(10528, 10277, 10772, 10711), class = "Date")), .Names = c("PENR", "ANFDAT", "ENDDAT"), row.names = c(1L, 2L, 3L, 4L), class = "data.frame")

ANFDAT代表某个状态的开始,ENDDAT代表这个状态的终止

我想将此数据显示为条形图。每个条应该代表一个日期。每个条的高度应代表在该日期具有状态的记录数 (PENR)。

由于数据框非常大,我正在寻找一种有效的方法来实现这一点。

[编辑]

似乎我的问题具有误导性。这是我尝试做的事情:

  1. 为从min(df$ANFDAT)max(df$ENDDAT) 的每个日期生成一个数据框。这可以很容易地完成

    df1 <- data.frame(DATE = seq(min(df$ANFDAT), max(df$ENDDAT), by = "day"))
    
  2. 对于df1$DATE 中的每一行,计算df 中具有ANFDAT &gt;= DATEENDDAT &lt;= DATE 的记录数。将结果存储在df1$RECORDS
  3. df1 生成条形图。这可能可以这样做(未经测试)

    df2 <- df1$RECORDS
    row.names(df2) <- df1$DATE
    barplot(df2$RECORDS)
    

我的问题是找到一种有效的方法来做#2

【问题讨论】:

    标签: r date range bar-chart


    【解决方案1】:

    您可以在唯一日期上使用sapply 来计算记录数。

    整个过程:

    DATE <- seq.int(min(df$ANFDAT), max(df$ENDDAT), by = "day")
    
    df1 <- data.frame(RECORDS = sapply(DATE, function(x)
                                    sum(df[["ANFDAT"]] <= x &  df[["ENDDAT"]] >= x)))
    
    rownames(df1) <- DATE
    barplot(df1$RECORDS)
    

    【讨论】:

    • 谢谢!似乎我的问题确实有点误导。我会努力改进的!
    猜你喜欢
    • 1970-01-01
    • 2011-02-02
    • 1970-01-01
    • 1970-01-01
    • 2016-01-04
    • 2021-09-25
    • 2021-10-31
    • 1970-01-01
    • 2018-11-23
    相关资源
    最近更新 更多