我有一个非常大的数据框,包含如下数据:
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)。
由于数据框非常大,我寻找一种有效的方法来实现这一目标。
[编辑]
好像我的问题有误导性。这就是我尝试做的事情:
为min(df$ANFDAT)
到max(df$ENDDAT)
的每个日期生成数据框。这可以通过
df1 <- data.frame(DATE = seq(min(df$ANFDAT), max(df$ENDDAT), by = "day"))
df1$DATE
中的每一行,计算df
中ANFDAT >= DATE
和ENDDAT <= DATE
的记录数。将结果存储在df1$RECORDS
从df1
生成条形图。这可能就像那样(未经测试)
df2 <- df1$RECORDS
row.names(df2) <- df1$DATE
barplot(df2$RECORDS)
我的问题是找到一种有效的方法来做#2
答案 0 :(得分:2)
您可以在唯一日期使用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)