الطريقة الأكثر فعالية لتحويل DataFrame إلى Matrix والعكس

StackOverflow https://stackoverflow.com//questions/24012659

  •  21-12-2019
  •  | 
  •  

سؤال

لقد كنت أحاول تنفيذ بعض وظائف 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 يكون هنا لكنني لست متأكدًا من أن هذا سيساعدك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top