Обработка файла CSV в R

Я пытаюсь сделать R-скрипт, чтобы получить лучший обзор моих данных Банка CSV.
Моя цель состоит в том, чтобы сгруппировать все мои расходы в различные категории.
Например, Я хочу, чтобы McDonalds и Burger King пошли в “resturantsCosts”.
Расходы на продовольственный рынок от Kaisers, Lidl и Rewe перейдут к “foodCompaniesCosts”.
Стоимость подписки от Vattenfall, Gasag, и Vodaphone должен перейти к “subscriptionCosts”.

Моя трудность сейчас заключается в обработке информации.
Вот некоторые примеры запросов из моего CSV-файла:

«01554 MCDONALDS», «REWE251», «11379 BURGER KING ALEX BHF», «KAISERS TENGELMANN 82139 * DE», » KAISERS TENGELMANN 82124 * DE»

Моя идея состояла в том, чтобы разделить каждый запрос на список, удалить все цифры и сделать все буквы маленькими.
Например, » KAISERS TENGELMANN 82124 * DE” будет:
«kaisers» «tengelmann» «*de»

Тогда была моя идея, чтобы соответствовать результату в различных предварительных списков, чтобы увидеть, если одно из слов там. Например, список foodCompanies содержит следующие слова:» kaisers»,» lidl»,»rewe».
Поскольку список foodCompanies содержит слово «kaisers“, а запрос содержит слово” kaisers», будет совпадение. Однако у меня возникли трудности с его работой.
Кто-нибудь может мне помочь?

EDIT: проблема не в чтении данных. Проблема заключается в обработке данных. Я могу прочитать все компании и расходы, и они хранятся в «компании»и » расходы». Это следующее, что не работает правильно:

temp <- tolower( trimws( gsub('[[:digit:]]+', '', company[i]) ) ) 
temp <- strsplit(temp, " ") 

Например, установите» KAISERS TENGELMANN 82139*DE » в качестве переменной company. Я получаю следующий результат:

«c(«kaisers», «tengelmann», «*de»)»

Вот мой полный код:

mydata = read.csv2("mydata.csv", header = TRUE, sep = ";", quote = """,
                   dec = ",", fill = TRUE, comment.char = "")

company = mydata[[6]]
costs = mydata[[9]]

foodCompanies = c("kaisers", "lidl", "rewe")
resturants = c("burger king", "mcdonalds")
subscriptions = c("vattenfall", "gasag", "vodaphone")

foodCompaniesCosts = c()
resturantsCosts = c()
subscriptionCosts = c()

for (i in 1:length(company)){
  temp <- tolower( trimws( gsub('[[:digit:]]+', '', company[i]) ) )
  temp <- strsplit(temp, " ")

  if(any ( temp %in% foodCompanies ) == TRUE) {foodCompaniesCosts <- c(foodCompaniesCosts, costs[i])
  } else if(any ( temp %in% resturants ) == TRUE) {resturantsCosts <- c(resturantsCosts, costs[i])
  } else if(any ( temp %in% subscriptions ) == TRUE) {subscriptionCosts <- c(subscriptionCosts, costs[i])
  }
}

1 ответ

  1. В forцикле преобразуйте tempв a data.frameперед началом ifинструкций. В частности, добавьте строку temp <- data.frame(temp).