写入txt文件时数值会更改

时间:2019-02-13 09:18:24

标签: r file

我正在尝试从this file中提取第一列。它是由16个数字组成的序列,应视为字符串。问题是,当我将数据写入文本文件时,某些值似乎已更改。以下是我正在使用的代码。

dataMaster = read.table("Master.txt", header = F, colClasses = rep("character",67))

write.table(dataMaster$V1, "sequence.txt", col.names = F, row.names = F, 
            quote = F, sep = "\n")

下面是一个示例。我采用了相同的两行261182、261183。同一错误有很多出现。看来当我写9号文件时,它替换为0号。

enter image description here

主文件是在Mac环境中处理的,而我正在Windows环境中工作。

2 个答案:

答案 0 :(得分:3)

如果您想sequence成为character,另一种方法是指定您的colClasses

library(dplyr)

dataMaster %>% 
  select(1) %>% 
  write.table("sequence.txt", col.names = F, row.names = F, 
              quote = F, sep = "\n")

sequence <- read.table("sequence.txt", colClasses = "character")

dataMaster[c(261182, 261183), 1]
#[1] "9171513174761179" "9171513174771179"

sequence[c(261182, 261183), ]
#[1] "9171513174761179" "9171513174771179"

答案 1 :(得分:0)

如果要使用字符串进行操作,请参见下面的patL答案。接下来是我将数字序列视为数字的答案。


您可能需要增加scipen下的options值:

options(scipen=999)

当您输出numbers to any format时,这将使精度位数超过默认值15。

在输入方面,如果仅是为了避免损失而指定character,则应将numerals的{​​{1}}参数改为默认的read.table (第一种选择)将导致损失,而不会发出警告。我已从下面的帮助页面"no.loss"复制了相关文本。

?read.table
read.table(..., numerals = c("allow.loss", "warn.loss", "no.loss"))