データフレームを行列に変換する最も効率的な方法で、その逆
質問
データフレームと行列の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の列名として設定しません。誰かが列名をデータフレームの列名として設定する方法を説明できます。
解決
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
のソースコードは、ここで/ a>しかし、私はこれがあなたを助けるつもりであるかどうかわからない。
所属していません StackOverflow