데이터 프레임을 매트릭스로 변환하는 가장 효율적인 방법 및 그 반대의 경우

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

  •  21-12-2019
  •  | 
  •  

문제

데이터 프레임 및 매트릭스에 대한 RCPP 분할과 같은 기본 R 기능을 구현하려고 노력했습니다.이를 위해 데이터 프레임과 매트릭스를 앞뒤로 변환하는 가장 효율적인 방법을 알아야합니다.지금까지 DataFrame 생성자를 사용하여 매트릭스를 DataFrame으로 변환합니다.어떻게 데이터 프레임을 다시 matrix.let로 변환 할 수 있습니까? 모든 데이터는 두 번 유형의 데이터임을 가정합니다.

현재 접근법은

입니다.

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의 열 이름으로 설정하지 않습니다.누구나 데이터 프레임의 열 이름으로 열 이름을 설정하는 방법을 설명 할 수 있습니까?

도움이 되었습니까?

해결책

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의 소스 코드는 여기 그러나 나는 이것이 당신을 도울 것임을 확신하지 못한다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top