2015-08-24 3 views
5

Ich habe Liste Vektor mit einer Länge von vier mehrfach zu transformieren:Wie ein Vektor in Datenrahmen mit fester Dimension

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

Was ich tun möchte, ist, dass die Liste in einen Datenrahmen drehen mit Dimension (M * 4):

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

Wie kann ich das erreichen?

Antwort

12

konvertieren Sie einfach auf einen matrix, geben Sie die 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 

Die 'data.frame' Spalten sind alle character Klasse, die als Eingang vectorcharacter ist. Wir könnten die class auf der Grundlage der numerischen/nicht-numerische Werte mit 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

konvertieren Sie auch read.table auf den eingefügten Vektor versuchen können, und geben Sie die Anzahl der Spalten, die Sie erwarten. Allerdings ist, dass wahrscheinlich nicht so effizient wie matrix + data.frame + lapply sein:

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 und doppelt redundante, wenn Spaltennamen anzugeben .... – A5C1D2H2I1M1N2O1R2T1

Verwandte Themen