通过将另一个唯一的文件名部分替换为循环任务

时间:2016-06-24 08:20:29

标签: r loops dataframe

我是R的新手,刚刚编写了一个代码,工作正常。我想循环这个,以便它也适用于其他相同的41个data.frames。

输入文件名为“weatherdata .. + UNIQUE NUMBER ”,输出文件我想称之为“df + UNIQUE NUMBER”。

我编写的代码现在仅适用于文件weatherdata .. 5341 。我可以按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 个答案:

答案 0 :(得分:0)

您可以创建所有数据框的列表,然后使用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

然后你可以替换函数内的内容。希望这会有所帮助。

答案 1 :(得分: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..
}