2016-07-21 6 views

Antwort

2

Hier ist eine Methode:

dfNew <- data.frame(matrix(unlist(df), 100)) 
names(dfNew) <- paste0("Col", 1:10) 

Die erste Zeile wandelt das data.frame in einen Vektor (unlist) und dann in eine Matrix mit Zeilen der Länge 100 (matrix). Diese Matrix wird dann in einen data.frame (data.frame) konvertiert.

Hier sind die ersten 6 Reihen:

head(dfNew) 
    Col1 Col2 Col3 Col4 Col5 Col6 Col7 Col8 Col9 Col10 
1 1 101 201 301 401 501 601 701 801 901 
2 2 102 202 302 402 502 602 702 802 902 
3 3 103 203 303 403 503 603 703 803 903 
4 4 104 204 304 404 504 604 704 804 904 
5 5 105 205 305 405 505 605 705 805 905 
6 6 106 206 306 406 506 606 706 806 906 

Die zweite Zeile die data.frame Namen hinzufügt.

Daten

df <- data.frame(Values=1:1000) 
+0

es ist lustig, verwende ich immer stoßen mit Ihren Antworten !!! Es tut mir wirklich leid, dass ich es wirklich nicht störe :-p Ich mochte deine Antwort, großartig und einfach – Learner

+1

@Learner Wenn du eine andere Methode findest, um ein Problem zu lösen, ist das großartig. Es ist nützlich, mehrere Methoden anzuzeigen, da einige in einer Situation gut funktionieren, in einer anderen jedoch weniger gut. – lmo

1

Eine Alternative wird unter Verwendung des do.call, die auszuführen und einen Funktionsaufruf aus rbind kommenden Konstrukt, das eine Sequenz der Liste von lapply consturcted Argumente nimmt und kombinieren es nach Spalten

df <- data.frame(Values=1:1000) 
mydf <- data.frame(do.call(rbind,lapply(df,matrix, ncol=10))) 
names(mydf) <- paste0("Col", 1:10) 

Wenn nicht wie paste0 verwenden, um die Spaltennamen zu setzen, können Sie sprintf

names(mydf) <-sprintf("Col%d", 1:10) 

> head(mydf,5) 
# Col1 Col2 Col3 Col4 Col5 Col6 Col7 Col8 Col9 Col10 
#1 1 101 201 301 401 501 601 701 801 901 
#2 2 102 202 302 402 502 602 702 802 902 
#3 3 103 203 303 403 503 603 703 803 903 
#4 4 104 204 304 404 504 604 704 804 904 
#5 5 105 205 305 405 505 605 705 805 905