R专家,
我有一个大文本文件,它有特定的模式和格式。
我的text.txt包含
x1 `xx`nkkna`yy`taktnaknvcaklrhkahnktn, altlkhakthakd`xx`nmm cataitha`yy`knkcnaktnhakt
x2 `xx`ngkna`yy`taktnaknvcaklrhkahnktn, altlkhakthakdnmm cataithaknkcnaktnhakt
x3 `xx`nkg,kna`yy`taktnaknvcaklrhkahnktn, altlkhakthakdnmm cataithaknk`xx`cna`yy`ktnhakt
x4 nkkndataktnaknvcaklrhkahnktn, altlkhakthakdnmm cataithaknkcnaktnhakt
然后,我想让R找到一个单词列表,在这种情况下是x1,x2,x3和x4 在中间,我想得到每个人的列表,即“xx”和“yy”之间。
因此,结果将是四个列表
x1 = c("nkkna", "nmm cataitha")
x2 = c("ngkna")
x3 = c("nkg,kna", "cna")
x4 = c("NA")
但是,我面临两个问题,想请求你的帮助。
x< - read.csv(textConnection“xxx”)可能会有所帮助,但问题是我的文件太大而无法复制和过去,并且该文件应该被读作csv。有没有更好的方法将我的文本文件加载到R作为一个可以在之后搜索和grep的对象?
我学习strsplit可能会使用,它似乎在RCurl报废的材料中工作,它也在这里工作吗?如果是的话,你能介意教我怎么做?
非常感谢.....
答案 0 :(得分:8)
要回答您的第一个问题,要阅读文本文件,您应该使用函数scan()
。您在SO textConnection
上看到的引用纯粹是为了读取粘贴到控制台的一些示例数据。这就是我接下来要读取你的数据:
txt <- "
x1 `xx`nkkna`yy`taktnaknvcaklrhkahnktn, altlkhakthakd`xx`nmm cataitha`yy`knkcnaktnhakt
x2 `xx`ngkna`yy`taktnaknvcaklrhkahnktn, altlkhakthakdnmm cataithaknkcnaktnhakt
x3 `xx`nkg,kna`yy`taktnaknvcaklrhkahnktn, altlkhakthakdnmm cataithaknk`xx`cna`yy`ktnhakt
x4 nkkndataktnaknvcaklrhkahnktn, altlkhakthakdnmm cataithaknkcnaktnhakt"
dtxt <- textConnection(txt)
然后我以同样的方式使用scan
来读取textConnetion数据。在您自己的代码中,您应该修改以下行,因此tat dtxt是您的文件位置。我保持这种格式,以便其他人可以复制我的结果,而无需在他们自己的文件系统上创建文件:
dat <- scan(dtxt, what="character", sep="\n")
现在您已经阅读了数据,这是对sapply
,strsplit
和gsub
进行(稍微复杂)调用以操纵数据。
sapply(seq_along(dat),
function(i)unlist(c(sapply(strsplit(dat[i], "`xx`"),
function(x)gsub("^(.*?)`.*", "\\1", x)[-1]))))
结果完全按照您的指定:
[[1]]
[1] "nkkna" "nmm cataitha"
[[2]]
[1] "ngkna"
[[3]]
[1] "nkg,kna" "cna"
[[4]]
character(0)