2016-07-08 13 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)))) 

 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 

を返す私は「隔離」するIにXYベクトルを包んそのため、ファクタとしてではなく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 
関連する問題