Я возиться с набором данных о моих финансах за последние 10 недель ... Я пытаюсь суммировать суммы, потраченные / внесенные по каждому описанию магазина ... Я смог это сделать.
totalofeachstore <- FullStatement %>% group_by( Description) %>%
summarise_at(vars(Amount), funs(sum(., na.rm = TRUE)))
или
totalofeachstore <- totalofeachstore %>%
group_by(Description) %>%
summarize(Amount = sum(Amount))
проблема, которую я нахожу, состоит в том, что многие магазины включают свой магазин # или описание в мои заявления ... Примером может быть.
Arco Gas #345 -$45.54
Arco Gas #678 -$52.72
Из-заВ магазине # суммы не рушатся, как я ожидал.Есть ли способ свернуть / суммировать строки с одинаковыми именами, которые не идентичны?Например, в следующих именах магазинов ... Могу ли я свернуть все магазины Amazon на основе ключевого слова AMAZON или еще лучше, из-за нечетных AMZN и AMZ, которые находятся на 4-м и 5-м месте в списке?буквы?
AMAZON.COM*MT2M03AW1 AM PURCHASE AMZN.COM/BILL WA -8.08
AMAZON.COM*MT80Z2EC0 AM PURCHASE AMZN.COM/BILL WA -13.28
AMAZON.COM*MT8G19G51 AM PURCHASE AMZN.COM/BILL WA -31.03
AMZ*Stride Rite PURCHASE Customerservi NY -35.20
AMZN MKTP US AMZN.COM/B PURCHASE AMZN.COM/BILL WA -181.08
ARBYS 0154 PURCHASE -13.90
ARCO #42472 AM PURCHASE -30.73
ARCO #42493 AM PURCHASE -29.35
AUNT CHILADA'S PURCHASE -15.98
Я нашел похожие вопросы о свертывании одинаковых строк, но они не пытались суммировать в одно и то же время ... эти вопросы следующие.
R объединить строкис похожими значениями R: объединить строки с общей информацией
EDIT1 после некоторого дополнительного поиска в Google. Я нашел несколько предложений "regex", которые могут быть в состоянии сделать то, что я ищудля ... Однако я понятия не имею, как эти работы и выполнение? grep мне не очень помогли ... Это выглядит немного сложнее, чем я сейчас понимаю ... Может кто-нибудь помочь мне разобраться с этим?
из? Grep в R.
grep, grepl, regexpr, gregexpr and regexec search for matches to argument
pattern within each element of a character vector: they differ in the
format of and amount of detail in the results.
sub and gsub perform replacement of the first and all matches respectively.
grep(pattern, x, ignore.case = FALSE, perl = FALSE, value = FALSE,
fixed = FALSE, useBytes = FALSE, invert = FALSE)
grep("[a-z]", letters)
txt <- c("arm","foot","lefroo", "bafoobar")
if(length(i <- grep("foo", txt)))
cat("'foo' appears at least once in\n\t", txt, "\n")
i # 2 and 4
txt[i]
EDIT2: На основании приведенного ниже предложения был испробован этот код:
Totals2 <- totalofeachstore %>%
+ #remove everything after a *
+ mutate(store_name = gsub("\\*.*","",Description),
+ #remove everything after a space and a #
+ store_name = gsub("\\ #.*","",store_name),
+ #remove everything after a space and a number sequence
+ store_name = gsub("\\ [0-9].*","",store_name),
+ #assign the other Amazon purchases to Amazon
+ store_name =
ifelse(str_detect(store_name,'AMZ')==TRUE,'AMAZON.COM',store_name))
, но с ошибкой следующегоr продолжает выскакивать ... Я не думал, что gsub был частью пакета, отличного от base ..., но похоже, что я не загружал пакет, содержащий "str_detect" или что-то в этом роде.
Error in mutate_impl(.data, dots) :
Evaluation error: could not find function "str_detect".
РЕДАКТИРОВАТЬ 3: Совершенство!
Использование пакета "tidyverse" исправило ошибку, которую я получал, и все работает точно так, как описано, и это именно то, что я искал.