我有几百个关于按日期代码组织的.pet文件中的信息的文件(19960101格式为YYYYMMDD)。我正在尝试使用日期代码添加一个名为NDate的列:
for (pet.atual in files.pet) {
data.pet.atual <-
read.table(file = pet.atual,
header = FALSE,
sep = ",",
quote = "\"",
comment.char = ";");
data.pet.atual <- cbind(data.pet.atual, NDate= pet.atual)
}
我想要实现的目标,例如01-01-1996 NDate = 19960101,02-01-1996 NDate = 19960102等等。 for循环只是在每次使用最新的pet.atual创意时替换NDate字段吗?感谢
答案 0 :(得分:2)
小修改应该可以解决问题:
data.pet.atual <- NULL
for (pet.atual in files.pet) {
tmp.data <-
read.table(file = pet.atual,
header = FALSE,
sep = ",",
quote = "\"",
comment.char = ";");
tmp.data <- cbind(tmp.data, NDate= pet.atual)
data.pet.atual <- rbind(data.pet.atual, tmp.data)
}
您也可以将tmp.data<-cbind(...)
替换为tmp.data$NDate <- pet.atual
答案 1 :(得分:2)
您也可以尝试fread()
包中的rbindlist()
和data.table
(由于缺少可重复的示例而未经测试):
library(data.table)
result <- rbindlist(lapply(files.pet, fread), idcol = "NDate")
result[, NDate := anytime::anydate(files.pet[NDate])]
lapply()
&#34;循环&#34;对于每个条目执行files.pet
的{{1}}中的所有条目,并返回一个包含data.tables fread()
的列表,该列表是通过读取每个文件创建的。 fread
用于将所有部分组合成一个大型data.table。参数rbindlist()
生成一个名为idcol = NDate
的索引列,以标识最终输出中每行的来源。 id是列表长度的整数1(如果列表未命名)。
最后,ID号用于查找NDate
中的文件名,该文件名使用files.pet
包直接转换为类Date
。
编辑也许,在查找文件名之前,首先将文件名转换为anytime
可能更有效:
Date
虽然result[, NDate := anytime::anydate(files.pet)[NDate]]
非常聪明地分析和猜测用于读取文件的正确参数,但是提供其他参数可能是必要的(也可能更快),例如:
fread()
答案 2 :(得分:1)
是的,正如弗兰克所说,lapply会有所帮助。并且您希望使用rbind来保持每个文件的日期不同。有点像:
我假设files.pet是您要包含的所有文件的列表...
my.fun<-function(file){
data <- read.table(file = file,
header = FALSE,
sep = ",",
quote = "\"",
comment.char = ";")
data$NDate = file
return(data)}
data.pet.atual <- do.call(rbind.data.frame, lapply(files.pet, FUN=my.fun))
如果没有可重复的示例,我无法对此进行测试,因此您可能需要稍微玩一下,但一般方法应该有效!