Все.
Я пытался решить проблему с большим набором данных в течение некоторого времени и мог бы использовать вашу мудрость.
У меня есть DF (1,3M obs) со столбцом под названием customer вместе с 30 другими столбцами. Допустим, он содержит несколько экземпляров клиентов с Customer1 по Customer3000. Я знаю, что у меня проблемы с 30 из этих клиентов. Мне нужно найти всех клиентов, которые НЕ являются клиентами, с которыми у меня возникли проблемы, и заменить значение в столбце «клиент» текстом «Поддерживаемый клиент». Кажется, что это должно быть просто ... если бы не было количества obs, я бы загрузил его в Excel, отфильтровал всех плохих клиентов и скопировал / вставил текст «Поддерживаемый клиент» поверх того, что осталось.
Я попытался заменить и str_replace_all, используя grepl и paste / paste0, но безрезультатно. мой текущий код выглядит так:
#All the customers that have issues
out <- c("Customer123", "Customer124", "Customer125", "Customer126", "Customer127",
"Customer128", ..... , "Customer140")
#Look for everything that is NOT in the list above and replace with "Enabled"
orderData$customer <- str_replace_all(orderData$customer, paste0("[^", paste(out, collapse =
"|"), "]"), "Enabled Customers")
Этот код вызывает у меня эту ошибку:
Error in stri_replace_all_regex(string, pattern, fix_replacement(replacement), :
In a character range [x-y], x is greater than y. (U_REGEX_INVALID_RANGE)
Я попробовал обратный подход и вытащил список всех объектов, которые не сопоставьте список наших клиентов. Примерно так:
in <- orderData %>% filter(!customer %in% out) %>% select(customer) %>%
distinct(customer)
Это дает мне гораздо больший список клиентов, которые включены (~ 3100). Однако использование подхода str_replace_all and paste имеет проблемы. При этом большом количестве шаблонов паста больше не сворачивается с помощью «|» оператор. вместо этого я получаю строку, которая выглядит следующим образом:
"c(\"Customer1\", \"Customer2345\", \"Customer54\", ......)
При передаче в str_replace_all это не соответствует ни одному шаблону.
В любом случае, должен быть более простой способ сделать это. Спасибо за любую помощь.