2017-08-09 4 views
0

Ich extrahierte aus einem Datensatz den Additions-, Maximal- und Durchschnittswert einer Variablen y gemeinsam mit dem Maximalwert x.Datensatz zusammenfügen und Liste zusammenfügen

Ich bekomme auch den x Wert bei maximal y Wert.

Ich habe diese Werte unter Verwendung cbind Funktion gepoolt. Ich möchte diese Liste mit einem Datenrahmen merge, bekam aber

error:Error in sort.list(bx[m$xi]) : 'x' must be atomic for 'sort.list' 
Have you called 'sort' on a list? 

Auch ich versuchte, die unlist Funktion aber Artikel nicht gibt mir satistafctory Daten. Hier

ist der Code ich verwende:

AUC<-lapply(split(data_example, data_example$class), function(d) sum(d$y)) 
max.y<-lapply(split(data_example, data_example$class), function(d) max(d$y)) 
max.x<-lapply(split(data_example, data_example$class), function(d) max(d$x)) 
auc.mean<-lapply(split(data_example, data_example$class), function(d) mean(d$y)) 
x.ymax<-lapply(split(data_example, data_example$class), function(d) 
d$x[which.max(d$y)]) 

data1<-cbind(AUC,max.y,max.x, auc.mean, x.ymax) 

datafinal<-merge(data1, data_merge, by="class") 

Hier habe ich die Daten hochgeladen, um das Beispiel zu reproduzieren:

http://www.filedropper.com/dataexample_1 http://www.filedropper.com/datamerge

+0

Sie versuchen, auf 'cbind' Listenelemente. Vielleicht brauchen Sie 'data1 <- data.frame (AUC = unlist (AUC), max.y = unlist (max.y), max.x = unlist (max.x), auc.mean = unlist (auc.mean) , x.ymax = unlist (x.ymax), Klasse = Namen (AUC)) ' – akrun

+0

Es funktionierte perfekt. Danke vielmals! – Calfiao

+0

Danke, ich habe meinen Kommentar als Lösung gepostet – akrun

Antwort

0

Der Grund cbind nicht funktioniert, weil die Objekte waren list s. Es gibt mehrere Möglichkeiten, diese

1)lapply mit sapply ersetzen zu korrigieren vector Ausgang

AUC <- sapply(split(data_example$y, data_example$class), sum) 

und in ähnlicher Weise für die anderen Fälle zu bekommen und dann cbind wie im OP ist. Infact, kann es auf einem einzigen lapply/sapply zu

2) getan werden als die Objekte list s sind, unlist wir es und dann cbind

data1 <- data.frame(AUC = unlist(AUC),max.y = unlist(max.y), 
    max.x = unlist(max.x), auc.mean = unlist(auc.mean), 
    x.ymax = unlist(x.ymax), class = names(AUC))