将txt文件转换为csv并提取所选行

时间:2011-09-14 19:31:10

标签: r text

我有500个文件(保存在同一目录中)。

所有这些文件具有相同的格式,如下所示。虽然excel可以识别它们有3列,但如果我使用x <- read.csv(xxx.txt, header=T),R只能读取一列。我想有一种更聪明的方法可以做到这一点。

4077    40770     3.083 
4078    40780     2.985 
4079    40790     2.946 
4080    40800     3.010 
4081    40810     2.956 
4082    40820     3.080 
4083    40830     3.130 
4084    40840     3.167 
4085    40850     3.054 

将所有这些文件加载​​到R后,我想只提取0,100,200,300,...... 9000行,并将它们保存在500个独立文件中具有相同文件名的另一个目录中。

是否可以使用R?

自动完成

2 个答案:

答案 0 :(得分:2)

我认为您可以使用read.table()函数来改进代码,以导入自由格式化(分隔)数据文件,而不是专门为逗号分隔文件编写的rad.csv()。正如DWin所指出的那样,R中没有第0行。你可以这样试试:

directory <- "your.work.directoty" # where your data files are. 
                                   # It depends on your OS (Windows, Linux, MacOS)
ndirectory <- "your.new.directory"
files <- dir(directory)
files.to.read <- paste(directory, files, sep="/") 
files.to.write <- paste(ndirectory, files, sep="/")

for(i in 1:length(files.to.read) )
{
    d <- read.table(files.to.read[i], header=TRUE)
    temp <- d[c(1,seq(100, 9000, by=100)), ]
    write.table(temp, file=files.to.write[i], 
                row.names=FALSE)
}

希望得到这个帮助。

答案 1 :(得分:1)

装载:

  1. 使用&gt;创建一个名称最容易完成的列表list.files(  )

  2. 使用带有no sep的read.table循环遍历该列表 参数或sep =“\ t”(现在该文件中没有逗号或标题。)

  3. 也许:        lapply(flist,function(x)assign(x,read.table(x))          ......并将这些结合起来,也许就像这样        bigfile&lt; - do.call(rbind,flist)

    rhelp档案中有很多例子,而且这样做有很多例子;

  4. Loop in R loading files

    With R, loop over data frames, and assign appropriate names to objects created in the loop

    How to read.table() multiple files into a single table in R?

    提取(R中没有零行):

    subextract <- bigfile[ seq(1, 9001 , by=100), ]
    write.csv(subextract, file="smaller.csv")   # will have commas