【问题标题】:Reading txt file into R, which is separated by "not" sign (¬)将txt文件读入R中,用“非”号分隔(¬)
【发布时间】:2020-10-02 13:57:39
【问题描述】:

我正在尝试将一个大文件读入 R,该文件由“非”符号 (¬) 分隔。我通常做的是使用Text Edit将此符号更改为分号,并将其保存为csv文件,但此文件太大,当我尝试这样做时我的计算机不断崩溃。我尝试了以下选项:

my_data <- read.delim("myfile.txt", header = TRUE, stringsAsFactors = FALSE, quote = "", sep = "\t")

这会导致数据框只有一行。我知道,这是有道理的,因为我的文件不是由制表符分隔,而是由非符号分隔。但是,当我尝试将 sep 更改为 ¬ 或 \¬ 时,我收到以下消息:

Error in scan(file, what = "", sep = sep, quote = quote, nlines = 1, quiet = TRUE,  : 
  invalid 'sep' value: must be one byte

我也试过

my_data <- read.csv2(file.choose("myfile.txt"))

my_data <- read.table("myfile.txt", sep="\¬", quote="", comment.char="")

得到相似的结果。我搜索了与我类似的选项,但他的分隔符并不常用。

【问题讨论】:

  • 先用gsub,然后保存文件再重新打开呢?例如用“;”替换非符号。 my_data
  • 您是否尝试过双转义字符(在 R 中通常需要) - 即 sep="\\¬"
  • @AndrewGustar 试过了,得到了同样的信息: 扫描错误(文件,what = "",sep = sep,quote = quote,nlines = 1,quiet = TRUE,:无效​​的'sep' value: 必须是一个字节

标签: r


【解决方案1】:

您可以尝试阅读它的piped 翻译。

设置:

writeLines("a¬b¬c\n1¬2¬3\n", "quux.csv")

作品:

read.csv(pipe("tr '¬' ','  < quux.csv"))
#   a b c
# 1 1 2 3

如果逗号不适合你,这同样适用于其他替换字符:

read.table(pipe("tr '¬' '\t'  < quux.csv"), header = TRUE)
#   a b c
# 1 1 2 3

tr 实用程序适用于所有 linux,它应该适用于 macos,并且包含在 Rtools for windows(以及 git-bash,如果有的话)中。

如果使用pipe 出现问题,您可以随时使用tr 工具创建另一个文件(替换您的文本编辑器步骤):

system2("tr", c("¬", ","), stdin="quux.csv", stdout="quux2.csv")
read.csv("quux2.csv")
#   a b c
# 1 1 2 3

【讨论】:

  • tr 的使用取代了您的手动文本编辑器步骤。它以编程方式运行得非常快,并且可以将piped 直接转换为read.delim 或类似的R 函数调用。
  • 我终于尝试了test &lt;- read.csv2(pipe("tr '¬' ';' &lt; myfile.txt")),效果非常好,你让我的生活变得如此轻松。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-12
  • 2023-03-07
  • 2023-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多