У меня есть немного сложная проблема для решения.Удаление последовательных строк в группе строк для больших наборов данных в R
Предположим, у меня есть этот набор данных
Id Name Price sales Profit Month Category Mode Supplier
1 A 0 0 0 1 X K John
1 A 0 0 0 2 X K John
1 A 0 0 0 3 X K John
1 A 2 5 0 4 X L Sam
1 A 2 3 4 5 X L Sam
1 A 0 0 0 6 X L Sam
2 C 2 4 9 1 X M John
2 C 0 0 0 2 X L John
2 C 0 0 0 3 X K John
2 C 2 8 0 4 Y M John
2 C 2 8 10 5 Y K John
2 C 0 0 0 6 Y K John
3 E 0 0 0 1 Y M Sam
3 E 0 0 0 2 Y L Sam
3 E 2 5 9 3 Y M Sam
3 E 0 0 0 4 Z M Kyle
3 E 0 0 0 5 Z L Kyle
3 E 0 0 0 6 Z M Kyle
Теперь я хочу, чтобы удалить эти строки из кадра данных, за исключением тех продуктов Id
, которые имеют нулевое значение Price, sales
и profit
в течение трех месяцев подряд. Как удалить строки только в определенной группе в этом случае Id
Ожидаемых выходного
Id Name Price sales Profit Month Category Mode Supplier
1 A 2 5 0 4 X L Sam
1 A 2 3 4 5 X L Sam
1 A 0 0 0 6 X L Sam
2 C 2 4 9 1 X M John
2 C 0 0 0 2 X L John
2 C 0 0 0 3 X K John
2 C 2 8 0 4 Y M John
2 C 2 8 10 5 Y K John
2 C 0 0 0 6 Y K John
3 E 0 0 0 1 Y M Sam
3 E 0 0 0 2 Y L Sam
3 E 2 5 9 3 Y M Sam
Это просто воспроизводит образец, мои оригинальные данные имеют более 800K строк. Поэтому я ищу некоторые функции, которые могут быть достигнуты и на большом наборе данных.
Я попытался использовать подходы, упомянутые мне до того, как
library(data.table)
as.data.table(mydf)[, N := .N, by = .(Id, rleid(Price == 0 & sales == 0 & Profit == 0))][
!(Price==0 & sales == 0 & Profit == 0 & N >= 2)]
Это один, когда я попытался получена ошибка, что 'could not find rleid function'
и я имел data.table
пакет установки и загружен
PS Я задал этот вопрос перед и несколько решений в другой должности работали только на небольших данных и не получали ответа, который может решить эту проблему на большом наборе данных, поэтому я снова спрашиваю.
Для того, чтобы удалить строки с идентификатором продукта, который имеет нули три месяца подряд сделать строки должны иметь только идентификатор одинаковые или также другие столбцы, такие как категория, режим или поставщик? – Sam
Возможно, вам нужно обновить установленный пакет 'data.table'. –
У вас есть 'packageVersion (" data.table ")> =" 1.9.6 "'? Посмотрите на [история версий] (https://github.com/Rdatatable/data.table). – lukeA