2015-01-08 2 views
-1

У меня есть несколько файлов CSV, и я знаю, как их читать и переписывать. Но моя проблема в том, что прежде, чем связывать их, я хочу выполнить некоторые действия, а затем rbind их.читать файлы csv и выполнять функцию, а затем связывать вместе

Так что для одного файла я хотел бы сделать это:

a<-read.table(file="F:..... .csv", skip=1401, nrow=2,header=FALSE, sep=";") 
head(a) 
##display only some columns 
G<-a[,c(11:13)] 
H<-a[, c(14:16)] 
names(G)<-names(H) 
H_G<-as.data.frame(rbind(G, H)) 
##transpose to long format 
H_G<-t(H_G) 

и теперь я хочу, чтобы rbind Фромм все остальные файлы.

Я попробовал его с этим

filenames <- list.files(path="F:....2",pattern="*.csv") 
readlist <- lapply(filenames, read.table, skip=1401, nrow=2,header=FALSE, sep=";") 

, но тогда я не получаю результат я хочу.

+0

непроверенный, но, возможно, полезный' lapply (имена файлов, функция (x) read.table (x, skip = 1401, nrow = 2, header = FALSE, sep = ";"))) ' – ckluss

ответ

0

Этот код будет делать то, что вы хотите

Здесь я инициализировать несколько тестовых матриц:

a<-matrix(1:100,10) 
b<-matrix(901:1000,10) 
write.csv(file="test.csv",a) 
write.csv(file="test2.csv",b) 

Здесь я выполняю свой цикл:

filenames <- dir(pattern="*.csv") 
for (i in c(1:length(filenames))){ 
    print(filenames[i]) 
    assign(filenames[i],read.csv(filenames[i], header=FALSE)) 
    assign(filenames[i], get(filenames[i])[,8:10]) 
    if(i==1){output<-data.frame(matrix(vector(),10,0))} 
    results<-rbind(output,get(filenames[i])) 
    if(i==length(filenames)){output<-t(results)} 
} 

Примечания: число столбцов, которые я сделал в этом строка assign(filenames[i], get(filenames[i])[,8:10]) являются произвольными, вы должны вставить свои собственные.

Сообщите мне, если у вас есть вопросы или если это не сработает для вас. `

Смежные вопросы