gpt4 book ai didi

list - R:如何使用 R 从 txt 文件中获取信息

转载 作者:行者123 更新时间:2023-12-01 02:31:05 25 4
gpt4 key购买 nike

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")

但是,我面临着两个问题想请求您的帮助。

  • 如何将大文本文件读入 R?我从 stackoverflow 了解到命令

x <- read.csv(textConnection"xxx") 可能有帮助,但问题是我的文件太大,无法复制和粘贴,文件应该以 csv 形式读取。有没有更好的方法将我的文本文件加载到 R 作为可以搜索和 grep 的对象?

  • 如何编写代码来获取所有这些信息?

我了解到 strsplit 可能会用到,它似乎适用于 RCurl 报废 Material ,它在这里也适用吗?如果是,你能教我怎么做吗?

非常感谢......

最佳答案

要回答您的第一个问题,要读取文本文件,您应该使用函数 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")

现在您已经读取了数据,接下来是(有点复杂)调用sapplystrsplitgsub 来操作数据.

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)

关于list - R:如何使用 R 从 txt 文件中获取信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6186247/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com