2016-05-04 17 views
2

こんにちは、変数Days2010:Days2015に日数を抽出しようとしています。開始日と終了日は、1年以上にわたる場合もあります。開始日と終了日が1年ごとに抽出され、年にまたがっていない可能性があります

df <- data.frame(BEGIN_DT = c("12/12/2013", "01/14/2013", "02/12/2012", "09/23/2013", "10/18/2013"), 
      END_DT = c("09/04/2015", "06/01/2013", "04/01/2013", "11/09/2015", "11/12/2014")) 
rownames(df) <- c(16:20) 
df$BEGIN_DT <- as.Date(df$BEGIN_DT, "%m/%d/%Y") 
df$END_DT <- as.Date(df$END_DT, "%m/%d/%Y") 


    `BEGIN_DT  END_DT 
    16 2013-12-12 2015-09-04 
    17 2013-01-14 2013-06-01 
    18 2012-02-12 2013-04-01 
    19 2013-09-23 2015-11-09 
    20 2013-10-18 2014-11-12` 

    So, for row 16, I would end up with 
    Days2012 = 19; 
    Days2013 = 365; 
    Days2014 = 365; 
    Days2015 = 246. 

ありがとうございます!エキス年、日付のシーケンスを作成し、あなたが各行を通過

apply(df, 1, function(x) { 
       dates <- seq.Date(as.Date(x[1]), as.Date(x[2]), by = 'days') 
       table(format(dates, '%Y')) 
       } 
    ) 

とクロス集計を行います。ここでは

答えて

4

は一つの解決策あなたがdfで物事を持っていると仮定しています。これはリスト形式であなたを提供します。必要に応じて出力形式を変更できます。

次のように、データフレームの中にそれを得ることができ、あなたがlと呼ばれるリストに上記の出力を保存したと仮定すると:

maxLength <- max(sapply(l, length)) 
as.data.frame(t(sapply(l, function(x) 
          c(x, rep(NA, maxLength - length(x))) 
        ) 
       ) 
      ) 

    2013 2014 2015 
16 20 365 247 
17 139 NA NA 
18 324 91 NA 
19 100 365 313 
20 75 316 NA 
+0

applyコマンドが既にリストを提供し、私は、データフレームに変換するためのコードを追加しましたオプション。 – Gopala

+0

これは完璧です!あなたの非常に有益な答えに感謝します! – Borderlands54

+0

はい、私はそれを最終的に考え出しました。ありがとうございました。私は今データフレームに持っています。今私はこれを私の実際のdfに適用する必要があります。再度、感謝します! – Borderlands54

関連する問題