将 DataFrame 转换为 Matrix 的最有效方法,反之亦然
题
我一直在尝试实现一些基本的 R 函数,例如 Rcpp 中数据框和矩阵的 split。为此,我需要知道来回转换数据帧和矩阵的最有效方法。到目前为止,我使用 DataFrame 构造函数将矩阵转换为 DataFrame。如何将 DataFrame 转换回 Matrix。假设所有数据都是 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
是 这里 但我不确定这会对你有帮助。
不隶属于 StackOverflow