2011-08-31 74 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