我有一个包含大约160个文件的文件夹,其格式为三列:开始时间,变量1' x'和变量2' y'。 Onset在R中列为字符串,但它是一个时间变量,它是Hour:Minute:Second:FractionalSecond。我需要删除小数秒。如果我可以圆,这将是伟大的,但可以使用像substr(文件$ onset,1,8)之类的东西删除小数秒。
我的文件的命名格式类似于File001 File002 File054 File1001
onset X Y
00:55:17:95 3 3
00:55:29:66 3 4
00:55:31:43 3 3
01:00:49:24 3 3
01:02:00:03
我正在尝试使用lapply。 lapply似乎很简单,但我很难搞清楚。下面写的代码返回一个错误,即最后一行没有3个元素。对于我的最终输出,重要的是我的最后一行只有起始值。
lapply(files, function(x) {
t <- read.table(x, header=T) # load file
t$onset<-substr(t$onset,1,8)
out <- function(t)
# write to file
write.table(out, "filepath", sep="\t", quote=F, row.names=F, col.names=T)
})
答案 0 :(得分:0)
First create a data frame of all text files, then you can apply strptime and format functions for the same vector to remove the fractional second.
filelist <- list.files(pattern = "\\.txt")
alltxt.files <- list() # create a list to populate with table data (if you wind to bind all the rows together)
count <- 1
for (file in filelist) {
dat <- read.table(file,header = T)
alltxt.files[[count]] <- dat # creat a list of rows from txt files
count <- count + 1
}
allfiles <- do.call(rbind.data.frame, alltxt.files)
allfiles$onset <- strptime(allfiles$onset,"%H:%M:%S")
allfiles$onset <- format(allfiles$onset,"%H:%M:%S")