2016-06-24 1 views
0

Я новичок в R и только что написал код, который отлично работает. Я хотел бы сделать это так, чтобы оно также применимо к другим идентичным 41 данным.Задачи Loop, заменяя одну уникальную часть имени файла другим

Входные файлы называются «weatherdata .. + UNIQUE NUMBER», выходные файлы, которые я хотел бы назвать «df + UNIQUE NUMBER».

Код, который я сейчас написали, относится только к файлу weatherdata .. . Я мог просто нажать CTRL + F и заменить все 5341 и запустить, что легко сделать. Но могу ли я сделать это с какой-то петлей? или у вас есть хороший учебник для меня, который мог бы научить меня, как это сделать? Я видел учебник с циклом for, но я не мог понять, как применить его для моего кода.
Небольшая часть кода приведена ниже! Я думаю, что если цикл работает над приведенным ниже кодом, он также будет работать для остальной части кода. Вся помощь ценится! :)

#List of part of the datafiles just 4 out of 42 files 
list.dat <- list(weatherdata..5341,weatherdata..5344, weatherdata..5347, 
       weatherdata..5350) 

# add colum with date(month) as a decimal number 
weatherdata..5341$Month <- format(as.Date(weatherdata..5341$Date) , "%m") 

# convert to date if not already 
weatherdata..5341$Date <- as.Date(weatherdata..5341$Date, "%d-%m-%Y") 

#Try rename columns 
colnames(weatherdata..5341)[colnames(weatherdata..5341)=="Max.Temperature"] <- "TMPMX" 

    # store as a vector 
v1 <- unlist(Tot1) 

    # store in outputfile dataframe 
Df5341<- as.data.frame.list(v1) 
+2

Вы можете улучшить свой вопрос. Imho хороший пост обычно обеспечивает минимальные входные данные, желаемые выходные данные и воспроизводимый код - все копирование-вставку. Плакат также должен сбросить балласт (= 99% здесь?). Итак, абстрактно от вашей проблемы, сводите к минимуму ваш пример. набора данных и кода, сохраняя при этом полную воспроизводимость, сосредоточьтесь на реальной проблеме и убедитесь, что есть вопрос, который выделяется. Здесь, похоже, вы хотите заменить некоторые символы в некоторых именах файлов. Таким образом, укажите несколько имен файлов, например, 'dput (myfilenames [1: 5])', а также показать, на что вы хотите, чтобы они выглядели. – lukeA

ответ

0

Вы можете создать список всех dataframes, а затем использовать sapply цикл по каждому из них. Вот пример кода:

> v1 <- list(data.frame(x = c(1,2), y = c('a', 'b')), data.frame(x = c(3,4), y = c('c', 'd'))) 
> v1 
[[1]] 
    x y 
1 1 a 
2 2 b 

[[2]] 
    x y 
1 3 c 
2 4 d 

> sapply(v1 , function(x){(x$x <- x$x/4)}) 
    [,1] [,2] 
[1,] 0.25 0.75 
[2,] 0.50 1.00 

Затем вы можете заменить содержимое внутри функции. Надеюсь это поможет.

+0

Я не понимаю, как я должен вставлять свои данные в вашу формулу. Я попробовал это следующим образом, но это дало ошибку: «неожиданно», а иногда также дает: «неожиданно» « v1 <- list (data.frame (weatherdata..5341, weatherdata..5344, weatherdata..5347) , weatherdata..5350)) sapply (v1, function (x) {(x $ Month <- format (as.Date (x $ Date), "% m"), (x $ Date <- as.Date (x $ Дата, "% d-% m-% Y")}) –

0

Что-то, как это должно работать:

## Assuming that your files are CSV files and are alone in the folder 

Fnames <- list.files() # this pulls the names of all the files 
         # in your working directory 
Data <- lapply(Fnames, read.csv) 
for(i in 1:length(Data)){ 
    # Put your code in here, replacing the Df names with Data[[i]] 
    # for example: 

    # add colum with date(month) as a decimal number 
    Data[[i]]$Month <- format(as.Date(Data[[i]]$Date) , "%m") 

    # convert to date if not already 
    Data[[i]]$Date <- as.Date(Data[[i]]$Date, "%d-%m-%Y") 

    #Try rename columns 
    colnames(Data[[i]])[colnames(Data[[i]])=="Max.Temperature"] <- "TMPMX" 

    # And so on.. 
} 
Смежные вопросы