2
我想寫一點代碼,它會根據開始日期獲取數據框的一部分,每個開始日期對於每個用戶都是不同的。在R中設置基於變量開始日期的數據
假設我有以下data.frames(在現實中我的數據集是幅度大幾個數量級,但是這將足以作爲樣本集)
DF1:
> df
name start.date
1 Allison 2013-03-16
2 Andrew 2013-03-16
3 Carl 2013-03-16
4 Dora 2013-03-17
5 Hilary 2013-03-17
6 Louis 2013-03-18
7 Mary 2013-03-19
8 Mickey 2013-03-20
而且DF2:
> df2
names X03.16.2013 X03.17.2013 X03.18.2013 X03.19.2013
2001 Allison 5 5 0 0
2002 Andrew 2 0 0 0
2003 Carl 10 8 11 10
2004 Dora 0 4 0 0
2005 Hilary 0 3 5 0
2006 Louis 0 0 8 3
2007 Mary 0 0 0 7
2008 Mickey 0 0 0 0
我合併這兩個數據幀到一個名爲TMP:
>tmp
name start.date X03.16.2013 X03.17.2013 X03.18.2013 X03.19.2013
1 Allison 2013-03-16 5 5 0 0
2 Andrew 2013-03-16 2 0 0 0
3 Carl 2013-03-16 10 8 11 10
4 Dora 2013-03-17 0 4 0 0
5 Hilary 2013-03-17 0 3 5 0
6 Louis 2013-03-18 0 0 8 3
7 Mary 2013-03-19 0 0 0 7
8 Mickey 2013-03-20 0 0 0 0
我也有DF2的列名的列表轉換爲日期:
>dts
[1] "2014-03-16" "2014-03-17" "2014-03-18" "2014-03-19"
我認爲解決這個問題的方法是改變所有在DF2零個條目每個用戶的開始日期之前發生NA使用以下嵌套循環:
for (i in 1:dim(tmp)[1]){
for (j in 1:length(dts)){
for (z in 4:dim(tmp)[2]){
if (dts[j]< tmp$Date.of.Sign.Up[i]){
tmp[i,z]<-NA
} else {tmp[i,z]<-tmp[i,z]}
}
}
}
該循環的問題是1.它將無限運行,並且2.不起作用。它將tmp中的所有值從tmp [,3:end]更改爲零,無論開始日期如何。理想情況下,我會結束這樣的事情:
name start.date X03.16.2013 X03.17.2013 X03.18.2013 X03.19.2013
Allison 2013-03-16 5 5 0 0
Andrew 2013-03-16 2 0 0 0
Carl 2013-03-16 10 8 11 10
Dora 2013-03-17 NA 4 0 0
Hilary 2013-03-17 NA 3 5 0
Louis 2013-03-18 NA NA 8 3
Mary 2013-03-19 NA NA NA 7
Mickey 2013-03-20 NA NA NA NA
有什麼建議嗎?先謝謝你!
當你寫的語句'DF3 < - 融(DF2,id.vars = C( 「名」, 「start.date」 )'你是不是要說'df3 < - melt(df,id.vars = c(「name」,「start.date」))' – Archimeow 2014-09-18 21:57:30
對於第二種解決方案,我我沒有得到任何新加入。我不知道你是否提到df2你打算說tmp。我使用了下面的代碼兩次,一次假設你打算在所有你說的df2的地方說tmp,一次是這樣的:'dates < - names(tmp)[ - c(1,2,3)]' 'tmp [ (x,format =「X%m。%d。%Y」) tmp [,x ] [tmp $ Date.of.Sign.Up
Archimeow
2014-09-18 22:40:26
both times沒有NAs被插入 – Archimeow 2014-09-18 22:40:55