2016-05-23 2 views
0

У меня есть папка с примерно 160 файлами, которые отформатированы с тремя столбцами: время начала, переменная1 'x' и переменная 2 'y'. Начало указано в R как строка, но это временная переменная, которая является Часом: Минута: Второе: FractionalSecond. Мне нужно удалить дробную секунду. Если бы я мог обойти это, было бы здорово, но было бы просто просто удалить дробную секунду, используя что-то вроде substr (file $ onset, 1,8).R: Как изменить данные в столбце по нескольким файлам. Помогите понять lapply

Мои файлы именуются в формате, аналогичном 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

Похоже ваша ошибка read.table вопрос, то есть одна из линии в одном из 160 файлов не имеет 3 элемента. попытайтесь выяснить, реплицируется ли эта ошибка при запуске 'lapply (files, function (x) read.table (x, header = T))' –

ответ

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")