我有一个数据文件,我试图通过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&lt; - read.table(file =“myfile.asv”,sep ='\ 001')
扫描错误(文件,内容,nmax,sep,dec,quote,skip,nlines,na.strings,: 第1行没有30个元素
答案 0 :(得分:0)
sep
参数必须只有1个字符,因此^A
不是有效的sep
值。您可以通过阅读文件的所有行并通过strsplit
分割它们来解决这些问题:
lines<-readLines("file.txt")
ret<-simplify2array(strsplit(lines,"^A",fixed=TRUE))
您可能需要转置(t
函数)结果,为其指定colnames,将各列强制转换为正确的数据类型(这样一切都为character
)并强制转换为{ {1}}。
否则,您可以通过data.frame
,readChar
gsub
阅读整个文件到适当的分隔符并使用^A
:
read.table
答案 1 :(得分:0)
谢谢大家,@MrFlick合适的分隔符实际上就是答案。我碰巧在数据中遇到了一些额外的工件。
最终代码是:
myDf&lt; - read.table(file =&#34; myfile.asv&#34;,sep =&#39; \ 001&#39;,na.strings =&#39; \\ N&#39; ,quote =&#34;&#34;,fill = T)