使用R在R工作目录中重新排列源数据文件,自动执行多个文件的任务

时间:2012-03-26 20:50:08

标签: r

我是R的新手,目前正在学习如何自动化目录中文件的工作,目前我正在尝试使用5个样本CSV文件,每个列中包含每小时样本数据24小时。我正在尝试设置一些代码来将文件组织成适合将来的格式,这样我以后就可以在R中轻松阅读。我的文件格式很奇怪,有6个顶行,有不必要的数据。我正在尝试执行以下几项任务:

我的数据文件示例:

"w", "Fri 1 Jan", "123", "42", "12", "21"  
"w", "Sat 2 Jan", "23", "54", "62", "31"    
"w", "Sun 3 Jan", "13", "32", "22", "32"    
"w", "Mon 4 Jan", "153", "42", "52", "31"    
"w", "Tue 5 Jan", "13", "14", "67", "35"  
  • 任务1:忽略前6行并从第7行开始阅读

  • 任务2:将列标题设置为:“type”,“date”,“1”,“2”,“3”,“Sample”

  • 任务3:我的每个文件都有一个类似于此的文件名:“605_E875071_N713451.csv” - 我正在尝试创建3个新的单独列,其名称为:ID =“605”,Easting =“875071 “,和Northing =”713451“

  • 任务4:创建某种循环来执行所有这些步骤并直接保存到原始文件

我试图单独锻炼每一步,到目前为止,我设法在网站上找到代码来执行以下任务:

任务1:

data = read.csv(file.choose (),  skip = 6 )`    

任务2:

colnames(data) = c(“type”, “date”, “1”, “2”, “3”, “Total”)

任务3:

我不确定如何分成3个不同的列;到目前为止我所得到的可以创建一个额外的列并输入全名“605_E875071_N713451”:

read_csv_filename <- function(filename){ 
        ret <- read.csv(filename)    
        ret$Source <- filename     
        ret }  
     import.list <- ldply(filenames, read_csv_filename) 
             ldply(filenames, read_csv_filename)

我最终想要实现的目标如下:

“type”, “date”,  "ID", "Easting", "Northing", “1”, “2”, “3”, “Total”  
"w", "Fri 1 Jan",”605” ,”875071”,  “713451”,"123", "42", "12", "21"  
"w", "Sat 2 Jan",”605” ,”875071”,  “713451”,"23", "54", "62", "31"    
"w", "Sun 3 Jan",”605” ,”875071”,  “713451”,"13", "32", "22", "32"    
"w", "Mon 4 Jan",”605” ,”875071”,  “713451”,"153", "42", "52", "31"    
"w", "Tue 5 Jan", ”605” ,”875071”, “713451”,"13", "14", "67", "35"  

最后,我想知道是否有任何方法可以自动执行这些步骤以自动执行任务并对目录中的所有5个文件执行步骤并保存回原始文件?

我非常感谢你的任何建议和指导,谢谢

1 个答案:

答案 0 :(得分:3)

我说你已经走上了第1步和第2步的正确轨道。但是,为了自动完成这个过程,你需要使用list.files()而不是file.choose()

另外,我建议避免使用以数字开头或只是数字的列名。将它们命名为“一个”两个“三个”或“V1”等,以便您可以使用$稍后进行探索。

对于任务3,请查看strsplit

out <- strsplit(filename,'_')

然后你可以抓住它们并用它们做你想做的事情:

gsub('N', '', lapply(out, '[', 2)) # should get your Easting column

就你的上一个问题而言,简单的答案是否定的。更复杂的答案是它复杂!除非文件非常大(1e7行或更多)或者你的机器只有很少的内存,你应该把每个文件读入R(以及因此内存)并将它们写回来。

在某种程度上注意事项:当您处理此问题时,请随意询问单个特定问题(理想情况下,您可以使用一些数据样本,以便我们可以重现您正在处理的内容)并且您会变得更好,更多确切的答案。