我试图做一个R-脚本,以获得一个更好的概述我的CSV银行数据。我的目标是把我所有的成本分成不同的类别。例如,我希望McDonalds和汉堡王进入“resturantsCosts”。食品市场成本从凯泽尔,利德尔和瑞威将转到“foodCompaniesCosts”。从瓦斯顿福尔,加萨格和沃达丰订阅费用将转到“subscriptionCosts”。
我现在的困难是处理这些信息。以下是我的CSV文件中的一些查询示例:
"01554麦当劳“、"REWE251”、"11379汉堡王亚历克斯BHF“、”凯泽斯腾格曼82139*DE“、”凯泽斯腾格曼82124*DE“
我的想法是把每一个查询分成一个列表,删除所有的数字,并使所有的字母变小。例如,“82124*de”将是:"kaisers“" TENGELMANN”"*de“
然后,我的想法是将结果匹配到不同的预先制作的列表中,看看其中一个单词是否在那里。例如,foodCompanies列表包含以下单词:"kaisers“、"lidl”、"rewe“。因为foodCompanies列表包含单词“kaisers”,而查询包含“kaisers”,所以将有一个匹配项。然而,我很难让它开始工作。有人能帮我吗?
编辑:问题不在于读取数据。问题是如何处理数据。我能读懂所有的公司和成本,它们存储在“公司”和“成本”中。以下是不能正确工作的地方:
temp <- tolower( trimws( gsub('[[:digit:]]+', '', company[i]) ) )
temp <- strsplit(temp, " ") 例如,将“82139*DE”设置为可变公司。I得到以下结果:
"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])
}
}发布于 2016-05-06 18:18:31
在for循环中,在if语句开始之前将temp转换为data.frame。具体来说,添加行temp <- data.frame(temp)。
https://stackoverflow.com/questions/37078566
复制相似问题