2016-05-04 56 views
2

嗨我想提取天數變量Days2010:Days2015。生日和結束日期可能會跨越一年或更長時間。提取年份與開始和結束日期,可能會或可能不會跨越幾年的天數

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. 

在此先感謝!

回答

4

這裏是一個解決方案假設你有東西在df

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

你去的每一行,創建日期,提取多年的順序和做交叉。這以列表格式提供給你。您可以修改輸出格式以滿足您的需要。

你可以得到它爲數據幀如下,假設您保存上面的輸出到一個列表稱爲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

的適用命令已經提供了一個名單,我添加了代碼轉換成數據幀一個選項。 – Gopala

+0

這是完美的!非常感謝您的幫助! – Borderlands54

+0

是的,我終於明白了。謝謝。我現在已經在數據框中獲得了它。現在我只需要將其應用於我的實際DF。再次感謝! – Borderlands54

相關問題