将DataFrame转换为Matrix的最有效方法,反之亦然

时间:2014-06-03 10:21:02

标签: c++ dataframe rcpp

我一直在尝试实现一些基本的R函数,比如在数据帧和矩阵的Rcpp中拆分。为此,我需要知道最有效的来回转换数据帧和矩阵的方法。到目前为止,我使用DataFrame构造函数将矩阵转换为DataFrame。如何将DataFrame转换回Matrix.Lets假设所有数据都是double类型。

目前的做法是

矩阵到DataFrame

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

DataFrame to Matrix

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的列名。任何人都可以解释如何将列名设置为数据框的列名。

1 个答案:

答案 0 :(得分:2)

您缺少nrow的{​​{1}}方法。这可以简化您的代码。你不需要第一列的特殊外壳等......

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") ) ; 的源代码是here,但我不确定这会对您有所帮助。