2017-11-14 5 views
4

ich R. neu bin habe ich einen Datenrahmen mit Spaltennamen solchen Art:Split data.frame in Gruppen von Spaltennamen

file_001 file_002 block_001 block_002 red_001 red_002 ....etc' 
    0.05  0.2  0.4   0.006  0.05  0.3 
    0.01  0.87  0.56  0.4   0.12  0.06 

Ich mag durch den Spaltennamen in Gruppen aufgeteilt, um ein Ergebnis wie folgt zu erhalten:

group_file 
file_001 file_002 
    0.05  0.2 
    0.01  0.87 

group_block 
block_001 block_002 
    0.4  0.006 
    0.56  0.4 

group_red 
red_001 red_002 
    0.05  0.3 
    0.12  0.06 

...etc' 

Meine Datei ist riesig. Ich habe keine bestimmte Anzahl von Gruppen. Es muss nur durch den Beginn des Spaltennamens sein.

Antwort

7

In Basis R können Sie sub und split.default wie diese verwenden, um eine Liste von data.frames zurückzukehren:

myDfList <- split.default(dat, sub("_\\d+", "", names(dat))) 

diese zurück

myDfList 
$block 
    block_001 block_002 
1  0.40  0.006 
2  0.56  0.400 

$file 
    file_001 file_002 
1  0.05  0.20 
2  0.01  0.87 

$red 
    red_001 red_002 
1 0.05 0.30 
2 0.12 0.06 

split.default wird data.frames durch Variable nach Split zu seinem zweiten Argument. Hier verwenden wir sub und den regulären Ausdruck "_ \ d +", um den Unterstrich und alle darauf folgenden numerischen Werte zu entfernen, um die Aufteilungswerte "block", "file" und "red" zurückzugeben.

Als eine Randnotiz ist es in der Regel eine gute Idee, diese data.frames in einer Liste zu halten und mit ihnen durch Funktionen wie lapply zu arbeiten. Siehe die Antwort von Gregor auf this post für einige motivierende Beispiele.

+0

die Ergebnisse Ich habe sind: '$ file_001 file_001 0,05 0,01 file_002 $ file_002 0,2 0,87' – Keity

0

Vielen Dank lmo, nach der Verwendung Ihres Codes, es hat nicht funktioniert, wie ich wollte, aber ich kam mit einer Lösung dank Ihrer Anleitung.

Also, um einen Datenrahmen Liste zu teilen:

myDfList <- split.default(dat, sub(x = as.character(names(dat)), pattern = "\\_.*", "")) 

hoffen, dass es Menschen in der Zukunft helfen werden!

Verwandte Themen