Применить пользовательскую функцию к каждой строке фрейма данных с несколькими аргументами (аргументы из столбцов из выбранной строки). Код ускорения - PullRequest
0 голосов
/ 26 мая 2020

У меня более 0,5 миллиона счетов. У каждого счета есть заказчик, который должен оплатить его, и дату его создания. Я хочу добавить в эту таблицу столбец с информацией о том, сколько счетов для данного клиента было создано до этого счета. Я создал функцию, которая накладывает фильтр на таблицы, ограничивая его именем клиента и всеми счетами, которые были созданы ранее. Затем он вызывает l oop, который делает это для каждого счета. Второе решение - функция отображения. К сожалению, оба решения слишком медленные.

1)

totalPaidInvoices<-function(customerFun, invoiceDateFun) 

{ tempTable <- invoice1 %>% 

filter(customerId == customerFun & invoiceDateFun > invoiceDate ) 

nrow(tempTable) }


for(i in 1:nrow(invoice1))

{ invoice1$noofin[i] <- totalPaidInvoices(invoice1$customerId[i],invoice1$invoiceDate[i])

 }

2)

invoice1$TotalPaidInv <-    mapply(function(x,y) 
    (nrow(tempTable  <- invoice1 %>% 
            filter(customerId == x & y > invoiceDate))),invoice1$customerId,invoice1$invoiceDate)

Есть ли способ ускорить этот код?

...