2014-09-19 2 views
12

"녹여 내고 싶다"는 변형 된 패키지를 사용하여 데이터 프레임을 녹였다. 여기 reshape r을 사용하여 데이터를 "unmelt"하는 방법

는 (실제 데이터 프레임 500x100 이상인) 용융 된 데이터의 장난감 예이다

variable<-c(rep("X1",3),rep("X2",3),rep("X3",3)) 
value<-c(rep(rnorm(1,.5,.2),3),rep(rnorm(1,.5,.2),3),rep(rnorm(1,.5,.2),3)) 
dat <-data.frame(variable,value) 
dat 
variable  value 
1  X1 0.5285376 
2  X1 0.5285376 
3  X1 0.5285376 
4  X2 0.1694908 
5  X2 0.1694908 
6  X2 0.1694908 
7  X3 0.7446906 
8  X3 0.7446906 
9  X3 0.7446906 

각 변수 (X1, X2, X3)의 값 (3 다른 시간에 예상시킨 이것에 장난감 예가 똑같지 만, 이것은 결코 사실이 아닙니다.)

나 형태에 (뒤로)을 얻고 자하는 것이다 :

 X1  X2  X3 
1 0.5285376 0.1694908 0.7446906 
2 0.5285376 0.1694908 0.7446906 
3 0.5285376 0.1694908 0.7446906 

기본적 I 열 제목을 가변 컬럼 ID (X1, X2 등)에 정렬되도록 좋아 될 것이다. 나는 cast, dcast, recast 등등의 다양한 순열을 시도했다. 그리고 내가 원하는 형식으로 데이터를 얻지 못하는 것 같다. 와이드 폼에서 더 긴 폼 (예 : dat datset)으로 데이터를 '녹이는'일은 쉬웠지만 다시 가져 오는 것은 어려웠습니다. 어떤 아이디어? 나는 이것이 비교적 간단하다는 것을 알고 있지만, 나는 모양새 나 모양을 바꾸는 방법을 개념화하는 데 어려움을 겪고있다.

감사합니다, LP 내가 일반적으로 id 컬럼을 만든 다음 dcast를 사용하여이 작업을 수행 할

+0

녹은 데이터가 원래 있던 행에 대한 정보를 잃어 버렸기 때문에 조금 까다 롭습니다. 그 행은 대략 3 번에 추정 된 것입니다. 언제나 1-2-3 (또는 1-2, 2 개만있는 경우)으로 가정한다면, 그 정보로 행을 만든 다음 다시 캐스팅 할 수 있습니다. – Aaron

답변

19

: 당신이 할 필요가 얼마나 강력한에 따라

> dat 
    variable  value 
1  X1 0.4299397 
2  X1 0.4299397 
3  X1 0.4299397 
4  X2 0.2531551 
5  X2 0.2531551 
6  X2 0.2531551 
7  X3 0.3972119 
8  X3 0.3972119 
9  X3 0.3972119 
> dat$id <- rep(1:3,times = 3) 
> dcast(data = dat,formula = id~variable,fun.aggregate = sum,value.var = "value") 
    id  X1  X2  X3 
1 1 0.4299397 0.2531551 0.3972119 
2 2 0.4299397 0.2531551 0.3972119 
3 3 0.4299397 0.2531551 0.3972119 
+2

그들은 값의 수가 일관성이 없다고 언급했기 때문에'dat $ id '를'with (dat, ave (rep, 1, nrow (dat)), variable, FUN = seq_along)과 같은 것으로 변경하는 것이 좋습니다. '. – A5C1D2H2I1M1N2O1R2T1

+0

아, 고마워. 나는 이드를 놓치고 있었다. 이는 시뮬레이션을 통해 생성 된이 특정 데이터 세트에서 잘 작동합니다. –

1

을, 다음은 다양한 올바르게 캐스팅됩니다 변수의 발생 횟수 (순서에 관계없이)

> variable<-c(rep("X1",5),rep("X2",4),rep("X3",3)) 
> value<-c(rep(rnorm(1,.5,.2),5),rep(rnorm(1,.5,.2),4),rep(rnorm(1,.5,.2),3)) 
> dat <-data.frame(variable,value) 
> dat <- dat[order(rnorm(nrow(dat))),] 
> dat 
    variable  value 
11  X3 1.0294454 
8  X2 0.6147509 
2  X1 0.3537012 
7  X2 0.6147509 
9  X2 0.6147509 
5  X1 0.3537012 
4  X1 0.3537012 
12  X3 1.0294454 
3  X1 0.3537012 
1  X1 0.3537012 
10  X3 1.0294454 
6  X2 0.6147509 
> dat$id = numeric(nrow(dat)) 
> for (i in 1:nrow(dat)){ 
+ dat_temp <- dat[1:i,] 
+ dat[i,]$id <- nrow(dat_temp[dat_temp$variable == dat[i,]$variable,]) 
+ } 
> cast(dat, id~variable, value = 'value') 
    id  X1  X2  X3 
1 1 0.3537012 0.6147509 1.029445 
2 2 0.3537012 0.6147509 1.029445 
3 3 0.3537012 0.6147509 1.029445 
4 4 0.3537012 0.6147509  NA 
5 5 0.3537012  NA  NA 
관련 문제