我试图通过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
。
否则,您可以通过readChar
、gsub
和^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)