2

次のような data.frame があります。

ID     Date.A        Date.B        Variable
A      01/01/2012    03/24/2012    Apples
A      02/01/2012    03/24/2012    Oranges
B      01/01/2012    02/04/2012    Bananas
C      01/01/2012    04/22/2012    Apples
A      03/01/2012    03/24/2012    Grapes
B      02/01/2012    02/04/2012    Oranges
D      01/01/2012    03/15/2012    Apples

ID ごとに、Date.B の前の月の最初に対応する変数を見つける必要があります。したがって、ID A の場合、「オレンジ」を抽出する必要があります。これは、2012 年 3 月 24 日 - 1 か月 = 2012 年 2 月 24 日であり、その月の最初が 2012 年 2 月 1 日であるためです。

lubridate: format.Date(df$Date.B - months(1), format="%Y-%m-01") を使用した日付計算に問題はありません。厄介な for ループを書かずに、そのロジックを ddply またはプログラム的な方法で組み込むのに問題があります。アルゴリズムの助けや誰かが私のためにそれを解決することを求めているわけではありませんが、これに似たカスタム日付ロジックを使用する ddply の例を見てみたい.

前もって感謝します。

4

1 に答える 1

3

これはlubridateorplyrではありません。それがあなたの問題の解決策であるかどうかさえわかりません。mondatetcash21 が述べている理由から、このパッケージを使用することにしました。

10/31/2012 - months(1)

そして、私はもう plyr をあまり使用していないので、plyr についてはあまり考えていません。データがdatと呼ばれる場合:

#Read your data in
dat <- read.table(text="ID     Date.A        Date.B        Variable
A      01/01/2012    03/24/2012    Apples
A      02/01/2012    03/24/2012    Oranges
B      01/01/2012    02/04/2012    Bananas
C      01/01/2012    04/22/2012    Apples
A      03/01/2012    03/24/2012    Grapes
B      02/01/2012    02/04/2012    Oranges
D      01/01/2012    03/15/2012    Apples", header=TRUE)

#This may be unnecessary but when I read your data in the dates were characters
lapply(2:3,  function(i) {dat[, i] <<- as.Date(dat[, i], "%m/%d/%Y")})



library(mondate)
prevmon <- as.character(mondate(dat$Date.B) - 1)  #get minus 1 month
z <- strsplit(prevmon, "-")                       #make it that first of that month
dat$Date.C <- as.Date(sapply(z, function(x) paste(x[1], x[2], "01", sep="-")))

key <- split(dat, dat$ID)                         #make list of data frames by ID 

#fruit finding function
fruiter <- function(x) x[match(x[, "Date.C"][1], x[, "Date.A"]), "Variable"]
sapply(key, fruiter)

どちらが得られますか:

      A       B       C       D 
Oranges Bananas    <NA>    <NA> 

私があなたの質問に添付したコメントの理由から、明らかに数ヶ月のNAがあります。

于 2012-05-15T20:08:32.780 に答える