2014-11-20 83 views
1

我有一個數據幀的組織結構如下:R數據幀:轉換絕對日期爲1天多因素

Subject ID |  Collected Date  | Value 
3933332   9/14/2004 9:38   0.576 
3933332   9/15/2004 3:48   1.164 
3933332   9/17/2004 9:38   2.112 
3933332   9/21/2004 1:00   1.547 
6955455   5/12/2011 2:11   0.012 
6955455   5/13/2011 1:31   0.023 
6955455   5/14/2011 3:11   0.112 
6955455   5/17/2011 12:11   0.342 
...    ....      ... 

我需要的是:

Subject ID |  Day     | Value 
3933332   1      0.576 
3933332   2      1.164 
3933332   4      2.112 
3933332   8      1.547 
6955455   1      0.012 
6955455   2      0.023 
6955455   3      0.112 
6955455   6      0.342 
...    ....      ... 

編輯:澄清,新的主題ID有一個新的開始日期。

我知道我可以使用as.Date格式化日期(時間與我無關)。 下一步可能是使用plyr和/或應用函數來按主體ID拆分集合,但我不知道該怎麼做。

你能幫我嗎?

+0

什麼將是,讓你知道重新開始計數日期之間有什麼不同?這個月是?那一年?都?還有別的嗎? – n8sty 2014-11-21 00:08:40

+0

@ n8sty新主題ID – 2014-11-21 00:15:22

回答

4

這是一個想法。我不確定您的數據是如何組成的。因此,我決定 根據您上面的內容創建數據框。請注意0​​是characterfoo

library(dplyr) 

mutate(group_by(foo, ID), 
     Date = as.Date(Date, format = "%m/%d/%Y %H:%M"), 
     nDay = as.character(Date - Date[1] + 1)) 

#  ID  Date value nDay 
#1 3933332 2004-09-14 0.576 1 
#2 3933332 2004-09-15 1.164 2 
#3 3933332 2004-09-17 2.112 4 
#4 3933332 2004-09-21 1.547 8 
#5 6955455 2011-05-12 0.012 1 
#6 6955455 2011-05-13 0.023 2 
#7 6955455 2011-05-14 0.112 3 
#8 6955455 2011-05-17 0.342 6 

額外:這是我對上面的代碼天真的翻譯到data.table的想法。

DT = setDT(foo)[, Date := as.Date(Date, format = "%m/%d/%Y %H:%M")] 
DT[, nDay := as.character(Date - Date[1] + 1), by = ID] 

DATA

foo <- structure(list(ID = c(3933332, 3933332, 3933332, 3933332, 6955455, 
6955455, 6955455, 6955455), Date = c("9/14/2004 9:38", "9/15/2004 3:48", 
"9/17/2004 9:38", "9/21/2004 1:00", "5/12/2011 2:11", "5/13/2011 1:31", 
"5/14/2011 3:11", "5/17/2011 12:11"), value = c(0.576, 1.164, 
2.112, 1.547, 0.012, 0.023, 0.112, 0.342)), .Names = c("ID", 
"Date", "value"), row.names = c(NA, -8L), class = "data.frame") 
+0

對於提問者的數據框實際上是由相同的數據類型組成的可能性,您有什麼估計? – 2014-11-21 00:18:24

+0

@BondedDust非常感謝您的評論。除非我們有'dput',否則很難知道原始數據是如何精確構成的。在這裏,我的想法是通過手動輸入數字來創建數據,以便我可以支持OP。如果您有任何修改意見,請告訴我。我很樂意爲此工作。 :-) – jazzurro 2014-11-21 00:30:41

+0

對不起,如果你把我的評論作爲批評在適當情況下代碼的潛在價值。這只是我認爲日期時間值更可能是一個因素,即使提問者已經找出如何編輯標題並解決分隔符問題。 – 2014-11-21 00:34:19