2015-07-05 9 views
8

Ho un data.frame con diverse colonne Mi piacerebbe unirmi in una colonna in un nuovo data.frame.Rbind due vettori in R

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

come creerei un nuovo data.frame con una singola colonna che è 1: 9?

+2

Il titolo non corrispondono del tutto alla descrizione ... –

+7

'biblioteca (reshape2); melt (df1) ' – jenesaisquoi

risposta

9

Poiché data.frame s sono essenzialmente elenchi di colonne, unlist(df1) fornisce un vettore grande di tutti i valori. Ora si può semplicemente costruire una nuova data.frame da esso:

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

si potrebbe provare:

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

Nel caso in cui si desidera un indicatore di troppo:

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

solo per fornire un set completo di modi per farlo, ecco il modo tidyr.

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

Un altro utilizzando la funzione c:

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

Un altro approccio, proprio per l'utilizzo di Reduce ...

data.frame(Reduce(c, df1))