我被困住了。我已经定义了这些代码行,以便绑定我阅读解析其文件夹的不同csv。
setAs("character", "myDate", function(from) as.Date(from, format = "%d/%m/%Y"))
LF <- list.files("O:/00 CREDIT MANAGEMENT/", pattern = ".csv", full.names = TRUE, recursive = FALSE)
PayMatrix <- do.call("rbind", lapply(archivos1, function(x) {
read.csv(x, header = 3, sep = ";", dec = ",", skip = "2", na.strings = "",
colClasses= c("Expiration.Date" = "myDate", "Payment.date" = "myDate"))
}))
我的问题是它是一个非常大的数据集,我想知道如何根据“Payment.Date”列的值(即Payment.Date&gt; 0)有条件地解析此csv,同样,我将只使用那些csv中的一小部分列,所以我想在循环之前或期间剪切文件。
我尝试了“awk”的事情,但它没有用。
{read.csv(pipe("awk '{if (Payment.date > 0) print [,c(1:2,6:9,29)]}'x"), header=3...
我的输入文件类似于此。 (csv,header = 3)
CURRENT INVOICES 27/03/2017 (W 13)
16276178,26
Client Code. Invoice Invoice Date Expiration Date Amount Payment date
1004775 21605000689 29/05/2016 29/07/2016 226,3
1005140 21702000548 28/02/2017 28/04/2017 22939,2
1004775 21703005560 25/03/2017 25/05/2017 21456,2
1004858 F9M01815. 30/01/2017 30/03/2017 5042,52 27/03/2017
答案 0 :(得分:1)
lapply()
功能中的选择是否适合您? (由于缺乏可重复的例子而未经测试)
PayMatrix <- do.call("rbind", lapply(archivos1, function(x) {
tmp <- read.csv(x, header = 3, sep = ";", dec = ",", skip = "2", na.strings = "",
colClasses= c("Expiration.Date" = "myDate", "Payment.date" = "myDate"))
tmp[tmp$Payment.Date > 0, ]
}))
BTW:为了有效处理大数据帧,我建议考虑使用data.table
包。这样,您的代码就可以(未经测试)
library(data.table)
PayMatrix <- rbindlist(lapply(archivos1, function(x) {
fread(x, <...>)[Payment.Date > 0, ]
}))
其中&lt; ...&gt;表示必须传递给fread()
的参数。
BTW:fread()
包中的data.table
函数不仅仅适用于大文件的速度。它为小数据提供了非常有用的便利功能。有关详细信息,请参阅fread
's wiki page。