2011-08-31 5 views
2

I는 다음과 같습니다 데이터의 긴 목록이있는 CSV이 있습니다

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

나는 데이터 프레임으로 이동하려는 단지 하나의 사용자 ID 열과 각 날짜 열이 있습니다. sapply 또는 lapply과 함께 할 수있는 방법이 있다고 가정하고 있지만 사용자 ID가 항상 모든 날짜에 존재하지는 않는다는 점을 잘 모르겠습니다.

답변

1

어쩌면 당신의 데이터가 dat에 저장되어 가정 다음과 같이 reshape를 사용하여 뭔가 :

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 

아니면 더 간단하게, reshape2에서 dcast를 사용

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