【问题标题】:Importing txt file in R --- Why does # symbol in variable names cause problems?在R中导入txt文件---为什么变量名中的#符号会导致问题?
【发布时间】:2022-01-29 13:38:23
【问题描述】:

我正在尝试使用read.table 函数将一些.txt 数据导入R。我拥有的实际数据集又大又复杂,因此我将在这里使用一个可重现的小示例来说明我遇到的问题类型。为了说明问题,请考虑以下两个文本文件:

TEST.txt
|VAR1  |VAR2  |
|12    |F     |
|56    |B     |
|18    |A     |

TEST2.txt
|VAR1  |VAR2# |
|12    |F     |
|56    |B     |
|18    |A     |

(我知道这些分隔符比获取两列数据所需的要多;这就是我的文本数据的构造方式。通过忽略第一个和最后一个变量对我来说很容易处理导入的数据框,但它似乎会影响我遇到的问题,因此我将其包含在可重现的示例中。)这是我尝试导入这些数据框时发生的情况:

#Import the first table (this works fine)
read.table('TEST.txt', header = TRUE, fill = FALSE, sep = '|', strip.white = TRUE)[, 2:3]

  VAR1 VAR2
1   12    F
2   56    B
3   18    A

#Import the second table (doesn't work)
read.table('TEST2.txt', header = TRUE, fill = FALSE, sep = '|', strip.white = TRUE)[, 2:3]

Error in read.table("TEST2.txt", header = TRUE, fill = FALSE, sep = "|",  : 
  duplicate 'row.names' are not allowed

如您所见,第一个数据帧(不带井号)正确导入,但第二个(带 has 符号)未正确导入。显然变量名中的哈希符号导致了问题,但我不确定为什么,或者如何处理。


问题:为什么会出现这个问题?解决问题的最简单方法是什么,以便正确导入后一个数据框。 (我不希望对底层文本文件进行任何更改,因此更喜欢使用R 命令的解决方案。)

【问题讨论】:

  • R 不喜欢变量名中的符号:“一个语法上有效的名称由字母、数字和点或下划线字符组成,并以字母或点开头,而不是数字。名称如因为“.2way”无效,保留字也无效。” stackoverflow.com/questions/9195718/…
  • 我不知道从 R 中删除那些的最佳实践,对不起!
  • read.table()comment.char= 的默认设置是comment.char="#",这会导致井号表示评论的开头。尝试使用comment.char=""。有关详细信息,请参阅手册页?read.table

标签: r import txt


【解决方案1】:

# 符号默认用于 cmets,因此将该值更改为其他值,正如 @JonSpring 提到的那样,列名中的 # 符号在语法上无效。所以允许使用check.names = FALSE

read.table(text = "|VAR1  |VAR2# |
|12    |F     |
|56    |B     |
|18    |A     |", header = TRUE, fill = FALSE, sep = '|', 
strip.white = TRUE, comment.char = "@", check.names = FALSE)[, 2:3]

#  VAR1 VAR2#
#1   12     F
#2   56     B
#3   18     A

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-21
    • 1970-01-01
    • 2021-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多