Я сделал простую функцию, которая устанавливает для столбца reversal_indicator значение «да», если значение в Reversal_Accounting_Transaction_ID присутствует в любом месте столбца Accounting_Transaction_ID (т.е. в других строках). Большинство записей в столбце Reversal_Accounting_Transaction_ID, вероятно, будут пустыми и поэтому должно быть «нет».
Фрейм данных создается из CSV-файла 6 ГБ (предположим, приблизительно 6 миллионов строк) и обрабатывается на кирпичах данных.
Я не совсем уверен, почему он принимает такое долгое время
Rcpp::cppFunction('
std::vector<std::string>
reversals(DataFrame frame)
{
std::vector<std::string> Accounting_Transaction_ID = as<std::vector<std::string> >(frame["BELNR"]);
std::vector<std::string> Reversal_Accounting_Transaction_ID = as<std::vector<std::string> >(frame["STBLG"]);
std::vector<std::string> ReversalIndicator(Reversal_Accounting_Transaction_ID.size()) ;
if (Reversal_Accounting_Transaction_ID.size() == 0) {
return ReversalIndicator;
}
int dfSize = Reversal_Accounting_Transaction_ID.size();
for (int i = 0; i < dfSize; ++i) {
if (Reversal_Accounting_Transaction_ID[i] != "") {
for (int j = 1; j < dfSize; ++j) {
if(Accounting_Transaction_ID[j]== Reversal_Accounting_Transaction_ID[i]){
ReversalIndicator[i]="Yes";
break;
}
else if( (j== dfSize -1) ){
ReversalIndicator[i]="No";
}
}
}
else{
ReversalIndicator[i]="No";
}
}
return ReversalIndicator;
}
')```
```df$reversal=reversals(df)```