データフレームを行列に変換する最も効率的な方法で、その逆

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

  •  21-12-2019
  •  | 
  •  

質問

データフレームと行列のRCPPでの分割のような基本R関数のいくつかを実装しようとしています。そのためには、データフレームと行列を前後に変換する最も効率的な方法を知る必要があります。これまでのところ、データフレームコンストラクターを使用して、行列をデータフレームに変換します。データフレームにデータフレームをMatrix.letsに変換する方法は、すべてのデータがDouble型の型であるとします。

現在のアプローチは

です

データフレームへの行列

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

データフレームへの行列

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の列名として設定しません。誰かが列名をデータフレームの列名として設定する方法を説明できます。

役に立ちましたか?

解決

nrowDataFrameメソッドを欠出しています。これにより、コードが簡単になる可能性があります。あなたは最初の列のための特別なケースなどを必要としません...

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のソースコードは、ここで/ a>しかし、私はこれがあなたを助けるつもりであるかどうかわからない。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top