[R] 如何防止read.table读入数据时列名前自动加上"X."?

Posted jessepeng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[R] 如何防止read.table读入数据时列名前自动加上"X."?相关的知识,希望对你有一定的参考价值。

最近用之前写的R脚本重新跑数据时,出现了报错。经检查,才发现是数据的列名读入R时发生了变化,列名前自动加上了X.符号。

read.table系列函数有一个check.names参数,默认为 TRUE,因此读入数据时它会自动检查变量名在R中是否有效。如果变量名包含首字母为数字、#$等情况时,则会自动加上X.,使变量看上去更像一个字符型变量。

check.names是通过调用make.names函数来实现增加字符这一过程的,如列名为1,2, 3, 4, 5,6时,会自动加上X

make.names(c("1", "2", "3", "4", "5", "6"))
[1] "X1" "X2" "X3" "X4" "X5" "X6"

但这往往不是我们希望的,因为变量名已经改变了, 就只能通过转换后的变量来访问对应数据。为了让列名称和原始的一致,在read.table时,可以设置check.names=F

补充

read.table参数解读

read.table(file, header = FALSE, sep = "", quote = ""'",
           dec = ".", numerals = c("allow.loss", "warn.loss", "no.loss"),
           row.names, col.names, as.is = !stringsAsFactors,
           na.strings = "NA", colClasses = NA, nrows = -1,
           skip = 0, check.names = TRUE, fill = !blank.lines.skip,
           strip.white = FALSE, blank.lines.skip = TRUE,
           comment.char = "#",
           allowEscapes = FALSE, flush = FALSE,
           stringsAsFactors = default.stringsAsFactors(),
           fileEncoding = "", encoding = "unknown", text, skipNul = FALSE)
  • file 指定读入的文件
  • header 是否有列名(默认无)
  • seq 指定分隔符(空格、TAB、换行符、回车符)
  • quote 制定包围字符型数据的字符。默认情况下,字符串可以被 " 或 ’ 括起,并且两种情况下,引号内部的字符都作为字符串的一部分。有效的引用字符(可能没有)的设置由参数 quote 控制。默认值改为 quote = ""
  • dec = "." 指定小数点数
  • colClasses 指定列的数据类型格式
  • row.names 指定各行名称,也可以是数字,指定某列为行名
  • col.names 指定各列名称
  • as.is = !stringsAsFactors as.is 字符向量是否转换成因子(仅仅这个功能),TRUE时保留为字符型
  • na.strings = "NA" 指定什么样的字符表示值缺少
  • colClasses = NA colClasses运行为输入中的每个列设置需要的类型。注意,colClassesas.is 对每 列专用,而不是每个变量。因此,它对行标签列也同样适用(如果有的话)。
  • nrows = -1 最大读入行数,即读入前多少行,“-1”表示都读入
    skip = 0 跳过文件的前n行(skip = n
  • check.names = TRUE # 检查变量名在R中是否有效

  • fill = !blank.lines.skip 从一个电子表格中导出的文件通常会把拖尾的空字段(包括?堑姆指舴? 忽略掉。为了读取这样的文件,必须设置参数 fill = TRUE

  • strip.white = FALSE 如果设定了分隔符,字符字段起始和收尾处的空白会作为字段一部分看待的。为了去掉这些空白,可以使用参数 strip.white = TRUE

  • blank.lines.skip = TRUE 默认情况下,read.table 忽略空白行。这可以通过设置 blank.lines.skip = FALSE 来改变。但这个参数只有在和 fill = TRUE 共同使用时才有效。这时,可能是用空白行表明规则数据中的缺损样本。

  • comment.char = "#"默认情况下,read.table# 作为注释标识字符。如果碰到该字符(除了在被引用的字符串内),该行中随后的内容将会被忽略。只含有空白和注释的行被当作空白行。如果确认数据文件中没有注释内容,用 comment.char = ""会比较安全 (也可能让速度比较快)。

  • allowEscapes = FALSE read.tablescan 都有一个逻辑参数 allowEscapes。从 R 2.2.0 开始,该参数默认为否,而且反斜杠是唯一被解释为逃逸引用符的字符。如果该参数设为是,以C形式的逃逸规则解释,也就是控制符如八进制和十六进制如 40x2A 一样描述。

Ref:
https://www.cnblogs.com/steamed-bread/p/5560641.html
https://www.cnblogs.com/xudongliang/p/5141459.html

以上是关于[R] 如何防止read.table读入数据时列名前自动加上"X."?的主要内容,如果未能解决你的问题,请参考以下文章

r语言txt数据读入问题

R语言数据分析过程

将数据读入 R

R语言:读入txt文件中文文本出现乱码解决方案

20190325-R语言读取数据之read.table()

R 函数笔记 read.table()函数