0

次のようなデータで構成される非常に大きなデータ フレームがあります。

  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レコードの数を数えます。結果を保存しますdfANFDAT >= DATEENDDAT <= DATEdf1$RECORDS
  3. から棒グラフを生成しdf1ます。これはおそらくそのように行うことができます(テストされていません)

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

私の問題は、#2を行う効率的な方法を見つけることです

4

1 に答える 1

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)
于 2012-12-06T09:03:00.073 に答える