2015-07-05 18 views
8

Ich habe eine data.frame mit mehreren Spalten Ich möchte in einer Spalte in einem neuen data.frame beizutreten.Rbind zwei Vektoren in R

df1 <- data.frame(col1 = 1:3, col2 = 4:6, col3 = 7:9) 

Wie würde ich eine neue data.frame mit einer einzigen Spalte erstellen, die 1: 9 ist?

+2

Der Titel nicht ganz der Beschreibung entsprechen ... –

+7

'Bibliothek (umformen2); schmelzen (df1) ' – jenesaisquoi

Antwort

9

Da data.frame s im Wesentlichen Listen von Spalten sind, gibt unlist(df1) Ihnen einen großen Vektor aller Werte. Jetzt können Sie einfach ein neues data.frame daraus konstruieren:

data.frame(col = unlist(df1)) 
5

Sie könnten versuchen:

as.data.frame(as.vector(as.matrix(df1))) 
# as.vector(as.matrix(df1)) 
#1       1 
#2       2 
#3       3 
#4       4 
#5       5 
#6       6 
#7       7 
#8       8 
#9       9 
6

Falls Sie einen Indikator will auch:

stack(df1) 
# values ind 
# 1  1 col1 
# 2  2 col1 
# 3  3 col1 
# 4  4 col2 
# 5  5 col2 
# 6  6 col2 
# 7  7 col3 
# 8  8 col3 
# 9  9 col3 
6

Nur ein komplettes Set zur Verfügung zu stellen Möglichkeiten, dies zu tun, hier ist die tidyr Weg.

library(tidyr) 
gather(df1) 
    key value 
1 col1  1 
2 col1  2 
3 col1  3 
4 col2  4 
5 col2  5 
6 col2  6 
7 col3  7 
8 col3  8 
9 col3  9 
6

Eine weitere Verwendung c Funktion:

data.frame(col11 = c(df1,recursive=TRUE)) 
     col11 
col11 1 
col12 2 
col13 3 
col21 4 
col22 5 
col23 6 
col31 7 
col32 8 
col33 9 
2

Ein anderer Ansatz, nur Reduce für die Verwendung ...

data.frame(Reduce(c, df1))