2015-08-24 12 views
5

mam listy wektor o długości wielokrotności czterech:Jak przekształcić wektora w ramce danych z ustalonym wymiarze

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

Co chcę rób to, aby włączyć ten wykaz w ramce danych z wymiarem (M * 4):

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

Jak mogę to osiągnąć?

Odpowiedz

12

Wystarczy przekonwertować do matrix określ 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 

Kolumny 'data.frame' są character klasy jako wejście vector jest character. Możemy przekształcić class opartą na wartościach liczbowych/non-numerycznych z 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

Możesz także spróbować read.table na wklejony wektora i określić liczbę kolumn można oczekiwać. Jednak, że nie jest zapewne będzie tak skuteczny jak 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 i podwójnie zbędny podczas określania nazwy kolumn .... – A5C1D2H2I1M1N2O1R2T1