2011-08-31 77 views
2

我有一個CSV數據的一個長長的清單,看起來像這樣:創建從列表數據R的數據幀丟失一些值

Date user_id value 
4/1  1   5 
4/1  2   3 
4/1  3   10 
4/2  1   1 
4/2  3   7 

,我想將它移動到數據幀只有一列用戶標識和每個日期的列。我假設有一種方法可以處理sapplylapply,但我不確定如何處理該用戶標識並不總是每個日期都存在。

回答

1

也許使用reshape像下面,它假設你的數據存儲在dat東西:

reshape(dat,v.names = "value",idvar = "user_id", 
     direction = "wide",timevar = "Date") 

    user_id value.4/1 value.4/2 
1  1   5   1 
2  2   3  NA 
3  3  10   7 

或者更簡單地說,使用dcastreshape2

dcast(dat,user_id~Date) 

    user_id 4/1 4/2 
1  1 5 1 
2  2 3 NA 
3  3 10 7 
0

這也未嘗tidyr::spread的確很方便

require(tidyr) 
require(dplyr) 

df <- data.frame("Date" = rep(c("Nov", "Dec"), each = 3), 
      "user.id" = rep(1:3, 2), 
      "value" = rnorm(6)) 

df.2 <- df %>% 
spread(Date, value) 

df.2 
    user.id  Dec  Nov 
    1  -1.9094765 -1.101037 
    2  0.2358694 -1.418151 
    3  -0.4297790 -1.426573