我正在尝试制作一个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])
}
}
答案 0 :(得分:0)
在TextField
循环中,在TextField
语句开始之前将for
转换为temp
。具体来说,添加行data.frame
。