【发布时间】:2016-05-06 17:49:52
【问题描述】:
我正在尝试制作一个 R 脚本来更好地了解我的 CSV 银行数据。 我的目标是将我所有的成本分成不同的类别。 例如,我希望麦当劳和汉堡王进入“resturantsCosts”。 Kaisers、Lidl 和 Rewe 的食品市场成本将转到“foodCompaniesCosts”。 Vattenfall、Gasag 和 Vodaphone 的订阅费用应计入“订阅费用”。
我现在的困难是处理信息。 以下是我的 CSV 文件中的一些查询示例:
“01554 MCDONALDS”、“REWE251”、“11379 汉堡王 ALEX BHF”、“KAISERS TENGELMANN 82139*DE”、“KAISERS TENGELMANN 82124*DE”
我的想法是将每个查询拆分为一个列表,删除所有数字,并使所有字母变小。 例如“KAISERS TENGELMANN 82124*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])
}
}
【问题讨论】: