2014-03-19 38 views
0

我確定這是一個簡單的問題,但我不確定要搜索什麼或如何解決它。R中的數據轉換 - 按ID分組變量

我的數據看起來是這樣的:

Date  UserID Var1 Var2 
2013-01 1  2  3 
2013-02 1  2  1 
etc. 

如果被記錄的日期是爲每個用戶不同。

我想找到的統計數據有關的變量(假設VAR2)之一,爲了做到這一點我想重塑數據,從而使輸出將是這樣的:

ID Time1 Time2 Time3 ... 
1 3  1  NA 
etc. 

哪裏時間1是第一次約會,用戶將出現在數據,時間2是下等

+0

你想查找有關變量的統計信息,或者只是重新設計一個變量的數據(這就是你的例子所做的)? – rawr

+0

@rawr - 我編輯澄清。希望有幫助。我想查找統計數據,但我想先重塑。 – Jeremy

+0

@Jealie - 類似的東西,但數據全部按ID分組,而不是一次只顯示一個ID。 – Jeremy

回答

1

編輯處理的相對尺度日期的重新調整)

有關使用reshape什麼?

這是輸入數據:

> zz <- "Date  UserID Var1 Var2 
+ 2013-01 1  2  3 
+ 2013-02 1  2  1 
+ 2013-02 2  2  1" 
> Data <- read.table(text=zz, header = TRUE) 

這是重塑:

Data2 = reshape(Data[c(1,2,4)],direction='wide',timevar='Date',idvar='UserID') 

在所得:

> Data2 
    UserID Var2.2013-01 Var2.2013-02 
1  1   3   1 
3  2   NA   1 

(注意c(1,2,4)是指對應的式柱號碼到DateUserIDVar2

最後,以獲得所需的輸出,你可以簡單地移動NA到每一行的末尾:

t(sapply(1:nrow(Data2), function(x) c(Data2[x,!is.na(Data2[x,])],rep(NA,sum(is.na(Data2[x,])))))) 

,導致:

 UserID Var2.2013-01 Var2.2013-02 
[1,] 1  3   1   
[2,] 2  1   NA  

注意,這裏的列名不再是當前的。此外,您可能在矩陣的右側有隻包含NA的列......我會讓您處理這些小細節。

+0

唯一的問題是,看起來它會將日期變量組成變量2,對嗎? 我的目標是讓列1成爲用戶ID X的第一個Var2,而不管日期是什麼。例如,如果UserID 1的最早記錄是2013-03,而UserID 2的最早記錄是2013-04,則這兩個值仍會顯示在T1列中。 – Jeremy

+0

我已編輯答案以考慮到這一點。你在找什麼? – Jealie