2016-07-08 3 views
0

스택을 수행하려고합니다. 내 데이터는이 칼럼에 의해 스택 그러나R 행 단위로 데이터 프레임 스택

set.seed(1) 
x<-runif(5) 
y<-runif(5) 
dat<-cbind(x,y) 
dat<-as.data.frame(dat) 
dat 
    x   y 
1 0.2655087 0.89838968 
2 0.3721239 0.94467527 
3 0.5728534 0.66079779 
4 0.9082078 0.62911404 
5 0.2016819 0.06178627 


stack(dat) 

    values ind 
1 0.26550866 x 
2 0.37212390 x 
3 0.57285336 x 
4 0.90820779 x 
5 0.20168193 x 
6 0.89838968 y 
7 0.94467527 y 
8 0.66079779 y 
9 0.62911404 y 
10 0.06178627 y 

즉 그것이 y 열을 취하고 그것을보다 x 을 둔다. 내가하고 싶은 다음과 같이 행하여 스택하는 것입니다 : 이것은 stack를 사용하는 방법을

0.2655087 x 
0.89838968 y 
0.3721239 x 
0.94467527 y 
0.5728534 x 
0.66079779 y 
0.9082078 x 
0.62911404 y 
0.2016819 x 
0.06178627 y 

을 할 수 있는가?

감사

답변

0

왜 (스택을 사용해야합니까)? 이것은 트릭을 수행 할 것입니다 :

# Creating your data frame 
set.seed(1) 
x<-runif(5) 
y<-runif(5) 
dat<-cbind(x,y) 
dat<-as.data.frame(dat) 
dat 

# Stacking the data 
dat2 <- rbind(data.frame("Value"=dat$x,"Ind"="x","Row"=seq(nrow(dat))), 
     data.frame("Value"=dat$y,"Ind"="y","Row"=seq(nrow(dat)))) 

# Ordering the data 
dat2 <- dat2[order(dat2$Row),setdiff(names(dat2),"Row")] 

     Value Ind 
1 0.26550866 x 
6 0.89838968 y 
2 0.37212390 x 
7 0.94467527 y 
3 0.57285336 x 
8 0.66079779 y 
4 0.90820779 x 
9 0.62911404 y 
5 0.20168193 x 
10 0.06178627 y 
1

매트릭스의 컬럼 지배적 저장을 이용하는 기본 R 메소드. 열 x와 y는 행렬로 바뀌며,이 행렬은 전치되어 벡터로 풀립니다. 우리는 결과 벡터의 구조 (순서)를 알고 있기 때문에, 우리는 새로운 변수로 XY 이름을 구축 :

data.frame(values=c(t(data.matrix(dat))), ind=I(rep(colnames(dat), nrow(dat)))) 

나는 "절연"로 I의 XY 벡터를 감싸

 values ind 
1 0.26550866 x 
2 0.89838968 y 
3 0.37212390 x 
4 0.94467527 y 
5 0.57285336 x 
6 0.66079779 y 
7 0.90820779 x 
8 0.62911404 y 
9 0.20168193 x 
10 0.06178627 y 

반환 즉, 팩터가 아닌 data.frame 함수 내에서 문자 벡터로 반환됩니다 (기본값). data.frame에서 stringsAsFactors = TRUE 인수를 사용하면 x y 벡터가 문자 유형으로 반환됩니다.

0

우리는 간단하게 할 수있는 :

data.frame(values=matrix(t(dat)), ind=colnames(dat)) 

     # values ind 
# 1 0.26550866 x 
# 2 0.89838968 y 
# 3 0.37212390 x 
# 4 0.94467527 y 
# 5 0.57285336 x 
# 6 0.66079779 y 
# 7 0.90820779 x 
# 8 0.62911404 y 
# 9 0.20168193 x 
# 10 0.06178627 y