gpt4 book ai didi

r - 如何使用多字节分隔符将文本文件读入 GNU R?

转载 作者:行者123 更新时间:2023-12-04 05:56:49 24 4
gpt4 key购买 nike

我可以使用 read.csv 或 read.csv2 将数据读入 R。但我遇到的问题是我的分隔符是多字节字符串而不是单个字符。我该如何处理?

最佳答案

提供示例数据会有所帮助。但是,您可以根据自己的需要调整以下内容。

我创建了一个示例数据文件,它只是一个包含以下内容的文本文件:

1sep2sep3
1sep2sep3
1sep2sep3
1sep2sep3
1sep2sep3
1sep2sep3
1sep2sep3

我将它保存为“test.csv”。分隔符是“sep”字符串。我想 read.csv()用途 scan() ,它只接受 sep 的单个字符.要绕过它,请考虑以下事项:
dat <- readLines('test.csv')
dat <- gsub("sep", " ", dat)
dat <- textConnection(dat)
dat <- read.table(dat)
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

然后,使用以下功能:
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)
}

尝试:
readMulti('test.csv', sep = "sep", replace = "\t", as.is = T)

在这里,您用制表符 ( \t ) 替换原来的分隔符。 as.is传递给 read.table()防止字符串被读入是因素,但这是你的要求。如果您的数据中有更复杂的空白,您可能会发现 quote参数在 read.table()有用,或使用 AWK、perl 等进行预处理。

类似于 crippledlambda 的 strsplit()最有可能等效于中等大小的数据。如果性能成为问题,请尝试两种方法,看看哪种适合您。

关于r - 如何使用多字节分隔符将文本文件读入 GNU R?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7883859/

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