2016-10-06 4 views
1

eine Liste gegeben, b01, von Listen: tp01, tp02, tp03, wo jeder tp speichert eine bestimmte Art von Daten, wie entpacke ich die Klasse jedes tp?Konvertieren verschachtelte Liste zu Datenrahmen, während Spaltentypen Erhaltung

Ziel ist es, einen einzelnen Datenrahmen zurückzugeben, der den ursprünglichen Variablentyp erhält (z. B. int, char). Ich dachte daran, die Klassen von jedem tp zu extrahieren und sie zu speichern und dann die Klassen des Datenrahmens mit diesen gespeicherten Klassen zu überschreiben. Im folgenden Beispiel enthält der resultierende Datenrahmen drei Variablen, die als Factor betrachtet werden. Ich möchte, dass sie als int, char, int betrachtet werden.

ich folgendes versucht ohne Glück:

str(as.data.frame(lapply(b01,unlist))) 
str(sapply(as.data.frame(lapply(b01,unlist)),class)) 
lapply(b01,unlist) 
sapply(str(lapply(b01,unlist)),unlist) 

MWE:

set.seed(1) 
tp01 <- list(sample(seq(0,100),10)) 
set.seed(2) 
tp02 <- list(sample(seq(0,100),10)) 
tp03 <- list(letters[c(sample(seq(0,26),10))]) 
b01 <- list(tp01, tp02, tp03) 

df <- as.data.frame(matrix(unlist(lapply(all,unlist)), 
    nrow=length(unlist(b01[1]))*length(all))) 
> df 
    V1 V2 V3 
1 26 q 18 
2 37 j 70 
3 56 t 56 
4 89 c 16 
5 19 g 91 
6 86 y 90 
7 97 w 12 
8 62 v 78 
9 58 r 43 
10 5 b 50 
11 18 26 q 
12 70 37 j 
13 56 56 t 
14 16 89 c 
15 91 19 g 
16 90 86 y 
17 12 97 w 
18 78 62 v 
19 43 58 r 
20 50 5 b 

str(df) 
'data.frame': 20 obs. of 3 variables: 
$ V1: Factor w/ 19 levels "12","16","18",..: 5 6 10 16 4 15 19 12 11 8 ... 
$ V2: Factor w/ 20 levels "19","26","37",..: 15 14 17 12 13 20 19 18 16 11 ... 
$ V3: Factor w/ 20 levels "12","16","18",..: 3 7 6 2 10 9 1 8 4 5 ... 
+2

@RichScriven auch nur 'data.frame (unlist (b01, recursive = FALSE))'. – nicola

+0

@nicola - ja, das ist die eine;) –

+0

Auch müssen Sie 'stringsAsFactors = FALSE' hinzufügen, um Zeichen anstelle von Faktor zu erhalten. – eipi10

Antwort

0

Sie können dies tun, mit lapply und as.data.frame:

names(b01) <- c("tp01","tp02","tp03") #optional 
first.step <- lapply(b01, unlist) 
second.step <- as.data.frame(first.step, stringsAsFactors = F) 

fehlenden oder See () Dokumentation für Informationen über Zwang mit diesem Schritt. Das Argument stringsAsFactors = F behält den Zeichenvektor im zweiten Schritt bei.

Verwandte Themen