2015-08-24 14 views
5

ho lista vettore con lunghezza multipla quattro:Come trasformare un vettore in frame di dati con dimensione fissa

mylist <- c("1", "darkorange", "16876", "16890", "2", "pink", "6833", "7189", 
"2", "pink", "9181", "9279", "2", "darkgreen", "1846", "2170" 
) 

Quello che voglio fare fare è quello di trasformare questa lista in una cornice di dati con la dimensione (M * 4):

V1 V2   V3  V4 
"1" "darkorange" "16876" "16890" 
"2" "pink"  "6833" "7189" 
"2" "pink"  "9181" "9279" 
"2" "darkgreen" "1846" "2170" 

Come posso ottenere quello?

risposta

12

Basta convertire in matrix, specificare il ncol

m1 <- matrix(mylist, ncol=4, byrow=TRUE) 
d1 <- as.data.frame(m1, stringsAsFactors=FALSE) 
d1 
# V1   V2 V3 V4 
#1 1 darkorange 16876 16890 
#2 2  pink 6833 7189 
#3 2  pink 9181 9279 
#4 2 darkgreen 1846 2170 

Le colonne 'data.frame' sono tutti character classe come l'ingresso vector è character. Potremmo convertire il class in base ai valori numerici/non numerici con type.convert

d1[] <- lapply(d1, type.convert) 
str(d1) 
#'data.frame': 4 obs. of 4 variables: 
#$ V1: int 1 2 2 2 
#$ V2: Factor w/ 3 levels "darkgreen","darkorange",..: 2 3 3 1 
#$ V3: int 16876 6833 9181 1846 
#$ V4: int 16890 7189 9279 2170 
6

Si può anche provare read.table sul vettore incollato, e specificare il numero di colonne che ci si aspetta. Tuttavia, che probabilmente non sarà così efficace come matrix + data.frame + lapply:

read.table(text = paste(mylist, collapse = " "), 
      col.names = paste0("V", 1:4)) 
# V1   V2 V3 V4 
# 1 1 darkorange 16876 16890 
# 2 2  pink 6833 7189 
# 3 2  pink 9181 9279 
# 4 2 darkgreen 1846 2170 
str(.Last.value) 
# 'data.frame': 4 obs. of 4 variables: 
# $ V1: int 1 2 2 2 
# $ V2: Factor w/ 3 levels "darkgreen","darkorange",..: 2 3 3 1 
# $ V3: int 16876 6833 9181 1846 
# $ V4: int 16890 7189 9279 2170 
+0

@RichardScriven, e doppiamente ridondante quando si specificano i nomi delle colonne .... – A5C1D2H2I1M1N2O1R2T1

Problemi correlati