2016-07-08 16 views
0

Ich versuche zu stapeln. Meine DatenR stapeln Datenrahmen nach Zeilen

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 

jedoch diese Stacks durch Spalte heißt es dauert y Spalte und setzt es unter x. Was ich tun möchte, ist es wie folgt Zeile zu stapeln:

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 

Wie dies geschehen stack verwenden kann?

Danke

Antwort

0

Warum müssen Sie stack() verwenden? Das macht den Trick:

# 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

Eine Basis-R-Methode, die die Spalte dominante Speicherung von Matrizen ausnutzt. Die Spalten x und y werden in eine Matrix umgewandelt, die transponiert und dann in einen Vektor ausgepackt wird. Da wir die Struktur (Ordnung) des resultierenden Vektors wissen, bauen wir die xy-Namen in eine neue Variable:

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

Welche

 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 gibt den xy-Vektor in I zu "isolieren" wrapped es, so dass es als ein Zeichenvektor innerhalb der data.frame Funktion zurückgeben würde, anstatt als ein Faktor, der der Standardwert ist. Die Verwendung des stringsAsFactors = TRUE-Arguments in data.frame würde auch den xy-Vektor als Zeichentyp zurückgeben.

0

Wir konnten einfach tun:

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