我可以使用read.csv或read.csv2将数据读入R.但我遇到的问题是我的分隔符是一个多字节字符串而不是单个字符.我怎么处理这个?
提供示例数据会有所帮助.但是,您可以根据需要调整以下内容.
我创建了一个示例数据文件,它只是一个包含以下内容的文本文件:
1sep2sep3
1sep2sep3
1sep2sep3
1sep2sep3
1sep2sep3
1sep2sep3
1sep2sep3
Run Code Online (Sandbox Code Playgroud)
我把它保存为'test.csv'.分隔字符是'sep'字符串.我认为read.csv()使用scan(),只接受一个字符sep.要解决它,请考虑以下事项:
dat <- readLines('test.csv')
dat <- gsub("sep", " ", dat)
dat <- textConnection(dat)
dat <- read.table(dat)
Run Code Online (Sandbox Code Playgroud)
readLines()只需读取行中的.gsub将多字符分隔字符串替换为单个' '或任何方便您的数据.然后textConnection()和read.data()读取一切回到方便.对于较小的数据集,这应该没问题.如果您有非常大的数据,请考虑使用类似AWK的预处理来替换多字符分隔字符串.以上内容来自http://tolstoy.newcastle.edu.au/R/e4/help/08/04/9296.html.
更新
关于您的评论,如果您的数据中有空格,请使用其他替换分隔符.考虑test.csv改为:
1sep2 2sep3
1sep2 2sep3
1sep2 2sep3
1sep2 2sep3
1sep2 2sep3
1sep2 2sep3
1sep2 2sep3
Run Code Online (Sandbox Code Playgroud)
然后,使用以下功能:
readMulti <- function(x, sep, replace, as.is = T)
{
dat <- readLines(x)
dat <- gsub(sep, replace, dat)
dat <- textConnection(dat)
dat <- read.table(dat, sep = replace, as.is = as.is)
return(dat)
}
Run Code Online (Sandbox Code Playgroud)
尝试:
readMulti('test.csv', sep = "sep", replace = "\t", as.is = T)
Run Code Online (Sandbox Code Playgroud)
在这里,您使用tabs(\t)替换原始分隔符.将as.is被传递到read.table()防止被读取的字符串是的因素,但这是你的电话.如果您的数据中有更复杂的空白区域,您可能会发现该quote参数read.table()有用,或者使用AWK,perl等进行预处理.
类似于crippledlambda的东西strsplit()很可能与中等大小的数据相当.如果性能成为问题,请尝试两者并查看哪些适合您.
| 归档时间: |
|
| 查看次数: |
3512 次 |
| 最近记录: |