Frage

Ich habe versucht, einige der grundlegenden R-Funktionen wie Split in Rcpp für Datenrahmen und Matrizen zu implementieren.Dazu muss ich die effizienteste Methode zum Hin- und Herkonvertieren von Datenrahmen und Matrix kennen.Bisher verwende ich den DataFrame-Konstruktor, um die Matrix in DataFrame zu konvertieren.Wie kann ich DataFrame zurück in Matrix konvertieren? Nehmen wir an, dass alle Daten vom Typ Double sind.

Der aktuelle Ansatz ist

Matrix zu DataFrame

NumericMatrix x;
DataFrame y= DataFrame(x);
y.attr("names")=x.attr("names");

DataFrame zu Matrix

DataFrame x;
int xsize=x.size();
NumericVector col=x(0); 
NumericMatrix y(col.size(),xsize);
for(int i=0;i<xsize;i++){
    y(_,i)=col;
    if(i<xsize-1){
       col=x(i+1);
    }
}
y.attr("names")=x.attr("names");

Gibt es eine effizientere Möglichkeit, diese Konvertierung durchzuführen?

Außerdem bin ich ein Neuling bei Rcpp.Kann jemand erklären, wie man den Quellcode einer bestimmten Klassenimplementierung findet, zum Beispiel NumericMatrix?

Auch die letzte Zeile

y.attr("names")=x.attr("names")

legt die Spaltennamen von x nicht als Spaltennamen von y fest.Kann jemand erklären, wie man die Spaltennamen als Spaltennamen des Datenrahmens festlegt?

War es hilfreich?

Lösung

Dir fehlt das nrow Methode für DataFrame.Dies könnte Ihren Code vereinfachen.Sie benötigen kein spezielles Gehäuse für die erste Säule usw.

int xsize=x.size();
NumericMatrix y(x.nrows(),xsize);
for(int i=0;i<xsize;i++){
    y(_,i) = NumericVector(x[i]);
}

Zum Festlegen der Spaltennamen können Sie Folgendes durchgehen dimnames Attribute:

y.attr("dimnames") = List::create( R_NilValue, x.attr("names") ) ;

Der Quellcode für Matrix Ist Hier aber ich bin mir nicht sicher, ob dir das helfen wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top