在 R 中导入 txt 文件 --- 为什么变量名称中的 # 符号会导致问题?
Importing txt file in R --- Why does # symbol in variable names cause problems?
我正在尝试使用 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
命令的解决方案。)
#
符号默认用于注释,因此将该值更改为其他值,正如@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
我正在尝试使用 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
命令的解决方案。)
#
符号默认用于注释,因此将该值更改为其他值,正如@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