2016-06-22 9 views
3

Mein Datenrahmen enthält folgende Komponenten:Alternative dlply in R

data$Value data$Name 
774   Name1 
770   Name1 
778   Name1 
804   Name1 
804   Name1 
802   Name1 
804   Name1 
900   Name2 
905   Name2 
805   Name2 
900   Name2 
950   Name2 
860   Name2 
870   Name2 
etc...  etc... for 100 Names 

Also, jeder Name hat 7 Werte zu zugeordnet. Ich möchte diesen Datenrahmen nach der Variablen "Name" gruppieren, aufteilen und die 7 Werte für jeden dieser Namen als Liste zurückgeben. Dies ist das Format meiner gewünschten Ausgabe:

my_list$Name1 = 
[[1]] 
[1] 774 770 778 804 804 802 804 

my_list$Name2 = 
[[1]] 
[1] 900, 905, 805, 900, 950, 860, 870 

etc... 

Die einfachste Lösung ist plyr die dlply-Funktion:

my_list <- dlply(data, "Name", function(x) list(x$Value)) 

Allerdings würde ich mit plyr vermeiden möchten. Was wäre eine gute Alternative? Ich habe meine Daten die folgende Art und Weise betrachtet Aufteilung:

splits <- function(x) { 
    y <- subset(data, select = c(Name, Value)) 
    splits <- split(y, y$Name) 
    return(splits) 
} 

my_list <- splits(data) 

Dies ist jedoch nach wie vor gibt mir eine Liste in folgendem Format:

 Value Name 
     (dbl) (chr) 
1  774 Name1 
2  770 Name1 
3  778 Name1 
4  804 Name1 
5  804 Name1 
6  802 Name1 
7  804 Name1 

UPDATE: LÖSUNG:

my_list <- lapply(split(data$Value, data$Name), list) 
+1

Vielleicht 'lapply (split (dd $ Wert, dd $ Name), list) ' –

Antwort

4

Ein Weg, es tun,

y <- subset(data, select = c(Name, Value)) 
list <- split(y, y$Name) 

unlist(sapply(list, '[', 1)) 

oder

unlist(unname(sapply(list, '[', 1))) 

oder einfach (Komplimente von @docendo discimus)

unlist(unname(split(y$Value, y$Name))) 

Ihren Kommentar In Bezug auf, dann kann man tun,

unname(split(y$Value, y$Name)) 
#[[1]] 
#[1] 774 770 778 804 804 802 804 

#[[2]] 
#[1] 900 905 805 900 950 860 870 
+2

Könntest du nicht einfach etwas wie' split (y $ Value, y $ Name) 'machen? –

+0

Ja, ich denke 'unlist (unname (split (y $ Value, y $ Name)))) würde funktionieren. – Sotos

+0

@Sotos: Ihre erste Lösung gibt mir einen Fehler zurück: "Fehler: Auswertung verschachtelt zu tief: unendliche Rekursion/Optionen (Ausdrücke =)? Fehler bei der Nachbearbeitung: Auswertung zu tief verschachtelt: unendliche Rekursion/Optionen (Ausdrücke =)?". – wsp1morlet