如何使用read.table可以使用^A(ctrl-A)作为字段分隔符



我试图通过read.table加载一个数据文件。该文件的字段分隔符为^a(ctrl-a)。它看起来像这样通过vi:

5^A41244901564015^A2542435^A2345234

我的尝试是:

myDf <- read.table(file = "myfile.asv", sep = '^A')
Error in scan(file, what = "", sep = sep, quote = quote, nlines = 1, quiet = TRUE,  : 
  invalid 'sep' value: must be one byte
myDf <- read.table(file = "myfile.asv", sep = as.character('^A'))
Error in scan(file, what = "", sep = sep, quote = quote, nlines = 1, quiet = TRUE,  : 
  invalid 'sep' value: must be one byte

关于创建一个与read.table一起使用的ctrl-a分隔符,有什么建议吗?我应该考虑其他解决方案吗。

根据尝试的评论:

myDf<-read.table(file="myfile.asv",sep='\001')

扫描时出错(文件,什么,nmax,sep,dec,引号,跳过,nlines,na.strings,:第1行没有30个元素

sep参数必须只有1个字符,因此^A不是有效的sep值。您可以通过读取文件的所有行并通过strsplit:进行拆分来解决问题

    lines<-readLines("file.txt")
    ret<-simplify2array(strsplit(lines,"^A",fixed=TRUE))

您可能需要转置(t函数)结果,为其分配colname,将各个列强制为正确的数据类型(通过这种方式,所有内容都是character),并强制为data.frame

否则,您可以通过readChargsub^A读取整个文件,并使用read.table:

    fileContent<-readChar("file.txt",nchar=file.info("file.txt")$size)
    fileContent<-gsub("^A",";",fileContent,fixed=TRUE)
    ret<-read.table(text=fileContent,sep=";")

谢谢大家,@MrFlick正确的分隔符实际上就是答案。我只是碰巧在数据中添加了一些工件。

最终代码为:

myDf<-read.table(file="myfile.asv",sep='\001',na.strings='\\N',quote=",fill=T)

最新更新