الطريقة الأكثر فعالية لتحويل DataFrame إلى Matrix والعكس
سؤال
لقد كنت أحاول تنفيذ بعض وظائف R الأساسية مثل الانقسام في Rcpp لإطارات البيانات والمصفوفات.لذلك أحتاج إلى معرفة الطريقة الأكثر فعالية لتحويل إطار البيانات والمصفوفة ذهابًا وإيابًا.حتى الآن أستخدم مُنشئ DataFrame لتحويل المصفوفة إلى DataFrame.كيف يمكنني تحويل DataFrame إلى Matrix. لنفترض أن جميع البيانات من النوع المزدوج.
النهج الحالي هو
مصفوفة إلى DataFrame
NumericMatrix x;
DataFrame y= DataFrame(x);
y.attr("names")=x.attr("names");
DataFrame إلى مصفوفة
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");
هل هناك طريقة أكثر فعالية للقيام بهذا التحويل؟
أنا أيضًا مبتدئ في Rcpp.هل يمكن لأي شخص أن يشرح كيفية العثور على الكود المصدري لتطبيق فئة معينة، على سبيل المثال NumericMatrix؟
وأيضا السطر الأخير
y.attr("names")=x.attr("names")
لا يقوم بتعيين أسماء أعمدة x كأسماء أعمدة y.هل يمكن لأي شخص أن يشرح كيفية تعيين أسماء الأعمدة كأسماء أعمدة لإطار البيانات.
المحلول
أنت تفتقد nrow
طريقة ل DataFrame
.قد يؤدي هذا إلى تبسيط التعليمات البرمجية الخاصة بك.لا تحتاج إلى الغلاف الخاص للعمود الأول، الخ...
int xsize=x.size();
NumericMatrix y(x.nrows(),xsize);
for(int i=0;i<xsize;i++){
y(_,i) = NumericVector(x[i]);
}
أما بالنسبة لتعيين أسماء الأعمدة، يمكنك الذهاب من خلال dimnames
صفات:
y.attr("dimnames") = List::create( R_NilValue, x.attr("names") ) ;
الكود المصدري ل Matrix
يكون هنا لكنني لست متأكدًا من أن هذا سيساعدك.