在R

时间:2016-05-06 17:49:52

标签: r csv

我正在尝试制作一个R脚本,以便更好地了解我的CSV银行数据。 我的目标是将所有费用分为不同的类别。 例如,我希望麦当劳和汉堡王进入“resturantsCosts”。 来自Kaisers,Lidl和Rewe的食品市场成本将转到“foodCompaniesCosts”。 Vattenfall,Gasag和Vodaphone的订阅费用将转至“subscriptionCosts”。

我现在的困难是处理信息。 以下是我的CSV文件中的一些查询示例:

<015>“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”,所以会有匹配。但是,我很难让它上班。 有人能帮助我吗?

编辑:问题不在于读取数据。问题是处理数据。我可以阅读所有公司和成本,它们存储在“公司”和“成本”中。以下是不能正常工作的:

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

例如,将“KAISERS TENGELMANN 82139 * DE”设为变量公司。我得到以下结果:

  

“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 个答案:

答案 0 :(得分:0)

TextField循环中,在TextField语句开始之前将for转换为temp。具体来说,添加行data.frame