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

R 将txt文件转换为csv并提取所选行,r,text,R,Text,我有500个文件(保存在同一个目录中) 所有这些文件都具有相同的格式,如下所示。虽然excel可以识别它们有3列,但如果我使用x加载,R只读取一列: 使用>list.files创建一个名称最简单的列表( ) 使用read.table循环浏览该列表,其中 参数或sep=“\t”(该文件中没有现在显示的逗号或标头。) 也许: lappy(flist,函数(x)赋值(x,读表(x)) …然后把这些结合在一起,也许用类似的东西 bigfile我认为您应该改进代码,使用read.table()函数导入自由

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

所有这些文件都具有相同的格式,如下所示。虽然excel可以识别它们有3列,但如果我使用
x加载,R只读取一列:

  • 使用>list.files创建一个名称最简单的列表( )

  • 使用read.table循环浏览该列表,其中 参数或sep=“\t”(该文件中没有现在显示的逗号或标头。)

  • 也许: lappy(flist,函数(x)赋值(x,读表(x)) …然后把这些结合在一起,也许用类似的东西
    bigfile我认为您应该改进代码,使用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)
    }
    

    directory我觉得这个答案的格式有点奇怪。@Adamlerich有什么特别的吗?我想他是在否决我,因为我在一个代码框里放了一个大纲。他肯定不是在抱怨其他SO答案的链接格式,因为它是在SO接口中硬编码的。我假设它是一个m我把它当作你的“提纲”是在一个代码框中。你想这样做吗?一定有更好的方法。可能是块引号?至少不会有语法高亮显示。用户界面中不太支持创建带有副标题的列表。Ramon:感谢你的脚本。我有相同的任务。但R返回一个错误:
    read.table(files.to.read[I]中的错误],header=TRUE):列数多于列名
    。如何修复?此错误告诉您数据中的一列或多列没有列名。您必须修改所有文件。您可以在第一个
    之后添加
    打印(i)
    刷新控制台(){
    for
    语句中,查看哪些文件有问题。可能是字段或小数点分隔符有问题。您可以在read.table函数中定义这两个字段:
    read.table(files.to.read[i],header=TRUE,sep=“;”,dec=“,”
    。希望这有帮助。谢谢,我修复了错误:)!一个小问题。我想在每个文件中提取一段文本,并用提取的文本在新类别中创建新的文本。如何将其插入for{}语句?不确定我是否理解您的问题。是否要从每个文件名中提取文本,并将其设置为数据框中的新变量?如果为true,则可以从
    stringr
    包中使用
    stru sub
    (请参阅
    example(stru sub)
    )函数。添加一行类似
    temp$class的新行
    
    subextract <- bigfile[ seq(1, 9001 , by=100), ]
    write.csv(subextract, file="smaller.csv")   # will have commas
    
    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)
    }