У меня есть фрейм данных, столбцы которого не имеют имени, и я хочу назвать их в R CPP? Как я могу это сделать? - PullRequest
0 голосов
/ 05 мая 2020

Я новичок в R cpp. У меня есть фрейм данных, столбцы которого не имеют имени, и я хочу назвать их в R cpp. Как я могу это сделать? То есть этот фрейм данных является входом, и затем на первом этапе я хочу назвать его столбцы. Пожалуйста, дайте мне знать, как я могу это сделать.

1 Ответ

1 голос
/ 07 мая 2020

Добро пожаловать в StackOverflow. Мы можем изменить существующий пример в пакете RcppExamples (который может оказаться полезным, как и другие части документации R cpp), чтобы показать это.

По сути, мы просто переназначьте атрибут names.

Код

#include <Rcpp.h>
using namespace Rcpp;

// [[Rcpp::export]]
List DataFrameExample(const DataFrame & DF) {

    // access each column by name
    IntegerVector a = DF["a"];
    CharacterVector b = DF["b"];
    DateVector c = DF["c"];

    // do something
    a[2] = 42;
    b[1] = "foo";
    c[0] = c[0] + 7; // move up a week

    // create a new data frame
    DataFrame NDF = DataFrame::create(Named("a")=a,
                                      Named("b")=b,
                                      Named("c")=c);

    // and reassign names
    NDF.attr("names") = CharacterVector::create("tic", "tac", "toe");

    // and return old and new in list
    return List::create(Named("origDataFrame") = DF,
                        Named("newDataFrame") = NDF);
}

/*** R
D <- data.frame(a=1:3,
                b=LETTERS[1:3],
                c=as.Date("2011-01-01")+0:2)
rl <- DataFrameExample(D)
print(rl)
*/

Demo

R> Rcpp::sourceCpp("~/git/stackoverflow/61616170/answer.cpp")

R> D <- data.frame(a=1:3,
+                 b=LETTERS[1:3],
+                 c=as.Date("2011-01-01")+0:2)

R> rl <- DataFrameExample(D)

R> print(rl)
$origDataFrame
   a   b          c
1  1   A 2011-01-08
2  2 foo 2011-01-02
3 42   C 2011-01-03

$newDataFrame
  tic tac        toe
1   1   A 2011-01-08
2   2 foo 2011-01-02
3  42   C 2011-01-03

R> 

Если вы закомментируете строку, вы получите старые имена.

...