2013-11-19 3 views
1

Я новичок в R и поэтому не очень хорошо знаком даже с простыми функциями. Краткое описание моей попытки: у меня есть одна директория с несколькими подкаталогами (11 подкаталогов, как видно из кода ниже). Каждый из этих субдиров. получил тот же удар. Каждый из этих субдиров. содержит четыре CSV-файла, называемых gwn, rh, ro и rg1. Я хочу читать каждый из gwn.csv один за другим и записывать его части в другой файл, который был создан в моей основной папке morking.Петля в разных подкаталогах

То моя последняя попытка:

files<-list.files("../Tagessummen") 

Это дает мне структуру direktory, которая выглядит как:

[1] "Beobachtet" "Projektion_00" "Projektion_11" 
[4] "Projektion_22" "Projektion_33" "Projektion_44" 
[7] "Projektion_55" "Projektion_66" "Projektion_77" 
[10] "Projektion_88" "Projektion_99" 

Теперь я thougt я мог бы использовать это для определения контура-путь. Я пытался с этим:

for(i in 1:length(files)) 
    Grundwasserneubildung_Daten<-read.table('../Tagessummen/',files,'/zeit.dat/Tag/geb_sum.gwn') 
    Grundwasserneubildung_Daten<-Grundwasserneubildung_Daten[-1,-1] 
    Grundwasserneubildung<-cbind(Grundwasserneubildung,Grundwasserneubildung_Daten) 
end 

Но это не работает. Я думаю, что это имеет какое-то отношение к определению цикла. Я прочитал много подобных вопросов, но пока не работал.

2 вопроса wolud be, как реализовать другой цикл, читать и работать с другими тремя файлами одним и тем же способом «один за другим». Надеюсь, у вас есть какой-то просветительский ответ для меня.

+0

«длина» не написана правильно? – Troy

+0

Thx, но, к сожалению, не недостающее звено .-) – Max

+0

'read.table (paste ('../ Tagessummen /', files, '/ zeit.dat/Tag/geb_sum.gwn'))'? Или с 'file.path' для лучшей совместимости, если необходимо? – Aaron

ответ

0

Попробуйте это:

files<-list.files("../Tagessummen") 

Grundwasserneubildung_Daten <- NULL 
for(i in 1:length(files)) { 
    Grundwasserneubildung_Daten[[i]]<-read.table(paste0('../Tagessummen/',files[i],'/zeit.dat/Tag/geb_sum.gwn'))[-1,-1] 
} 

Grundwasserneubildung <- do.call(cbind,Grundwasserneubildung_Daten) 

Это создает список dataframes затем использует do.call() называть cbind() на всех dataframes в конце. Однако cbind() не будет работать, если файлы имеют разные длины.

Одна ошибка была неправильной структурой цикла for. Во-вторых, вам нужно paste0(), чтобы связать строку правильно. Третья ошибка заключается в том, что files - это вектор имен файлов, поэтому, когда вы объединяете строки вместе, вы пытаетесь прочитать в векторе имен файлов, которые не будут работать так, как планировалось. Использование files[i] вместо files ссылается на один элемент (имя файла) вектора за раз.

+0

Спасибо, spdickson, теперь он работает. – Max

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