2014-03-19 2 views
0

이것은 간단한 질문이지만 확실한 검색 방법이나 해결 방법을 모르겠습니다.ID로 변수를 그룹화하는 데이터 변환

내 데이터는 다음과 같은 : 기록 된 날짜가 각 사용자에 대해 다른

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

.

나는 변수 (의이 변수 2를 대입 할 때 변수를 가정 해 봅시다) 중 하나에 대한 통계를 발견하고 내가 출력이 될 수 있도록, 데이터 모양을 변경하려면 그렇게하기 위해 할 뭔가 같은 :

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

곳 시간 1 등

(상대 규모에 날짜의 재 정렬을 처리하기 위해 편집 )

+0

변수에 대한 통계를 찾고 싶거나 변수 중 하나에 대한 데이터의 모양을 바꾸고 싶습니까? – rawr

+0

@rawr - 명확하게 편집했습니다. 잘하면 도움이됩니다. 나는 통계를 찾고 싶다. 그러나 나는 처음부터 다시 형성하고 싶다. – Jeremy

+0

@Jealie - 그런 식이지만 한 번에 하나의 ID 만 표시하는 대신 데이터가 모두 ID별로 그룹화됩니다. – Jeremy

답변

1

무엇 reshape 사용에 대한 타임 2는 옆에, 사용자가 데이터에 나타나는 첫 번째 날짜인가?

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)가 대응 콜럼 번호 지칭 유의

> 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) 

이 바꿀이다

이것은 입력 데이터이고 Date, UserIDVar2)

마지막으로

, 원하는 출력을 얻기 위해, 당신은 단순히 각 줄의 끝으로 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  

참고 여기에 열 이름 더 이상 현재 없습니다. 또한 행렬의 오른쪽에 열만있는 열이있을 수도 있습니다 ...이 작은 세부 사항을 처리하도록하겠습니다.

+0

유일한 문제는 변수 2를 날짜 변수로 그룹화하는 것처럼 보입니다. 맞습니까? 목표는 날짜가 무엇이든간에 열 1을 userID X의 첫 번째 Var2로 지정하는 것입니다. 예를 들어 UserID 1의 가장 빠른 레코드가 2013-03에 있고 UserID 2의 가장 빠른 레코드가 2013-04 인 경우이 값은 여전히 ​​T1 열에 모두 표시됩니다. – Jeremy

+0

이 점을 고려하여 답변을 수정했습니다. 그것은 당신이 찾고 있던 것입니까? – Jealie

관련 문제