2016-06-14 16 views
2

Ich habe einen Datenrahmen df suchen, wie diesesConvert Datenrahmen zu unbenannte Liste

A  B  C  D 
1 78 12 43 12 
2 23 12 42 13 
3 14 42 11 99 
4 49 94 27 72 

ich die ersten beiden Spalten müssen in eine Liste umgewandelt, wie dies genau aussieht:

[[1]] 
[1] 78 12 

[[2]] 
[1] 23 12 

[[3]] 
[1] 14 42 

[[4]] 
[1] 49 94 

Im Grunde, was

list(c(78, 12), c(23, 12), c(14, 42), c(49, 94) 

würde tun. Ich habe versucht, diese

lapply(as.list(1:dim(df)[1]), function(x) df[x[1],]) 

sowie

lapply(as.list(1:nrow(df)), function(x) df) 

Aber das ist etwas anders. Irgendwelche Vorschläge?

+1

Wie pedantisch werden Sie über das Fehlen von Namen in der Ergebnisliste sein? z.B. 'split (df [, 1: 2], seq_len (nrow (df)))' – joran

+0

@joran sehr. Ich brauche es genau wie ich beschrieben habe. Was die 'list()' mit verschiedenen Vektoren machen würde ... – Stophface

+0

Dann tu was ich vorgeschlagen habe und 'nname' es zweimal, einmal mit' lapply' und einmal auf der obersten Ebene. – joran

Antwort

5

können Sie versuchen, die Map:

Map(c, df$A, df$B) 
[[1]] 
[1] 78 12 

[[2]] 
[1] 23 12 

[[3]] 
[1] 14 42 

[[4]] 
[1] 49 94 
0

Falls dies von Interesse ist, ist es möglich, dies mit dem foreach Paket zu erreichen:

library(foreach) 
foreach(i=seq.int(nrow(df))) %do% (c(df[[i]][1], df[[i]][2])) 

foreach eine Liste von Standard zurückgibt. Der Code wird in den Zeilen ausgeführt und zieht Elemente aus der ersten und zweiten Spalte.

Eine noch sauberer zu lesen Version:

foreach(i=seq.int(nrow(df))) %do% (df[[i]][1:2]) 
0

Eine weitere Option ist mit lapply

lapply(seq_len(nrow(df1)), function(i) unlist(df1[i, 1:2], use.names=FALSE)) 
#[[1]] 
#[1] 78 12 

#[[2]] 
#[1] 23 12 

#[[3]] 
#[1] 14 42 

#[[4]] 
#[1] 49 94