【问题标题】:Why does the column name change after open the dataset in R?为什么在 R 中打开数据集后列名会更改?
【发布时间】:2020-07-02 02:38:29
【问题描述】:

我在R中导入了一个excel数据集,但是有一个列的名字有点变化,如下图:

第一列的原始名称是“Id”,但它似乎有点变化。而且我确保我没有更改原始数据集中的任何内容。刚在R中导入并打开,看起来是这样的。发生了什么?非常感谢!

【问题讨论】:

  • 您可以在读取数据集时使用check.names = FALSE。可能有一些特殊字符作为列名被转换为默认的check.names = TRUE
  • 好的。那么 check.names = TRUE 是什么意思呢?
  • 我的意思是read.csv("yourfile.csv", check.names = FALSE)。当 TRUE 时,它会触发。 make.namesmake.unique 函数检查列名并在发现任何可疑或不符合标准格式时更改它
  • 非常感谢!明白了!
  • 您的文件似乎有一个 UTF 字节顺序标记 (BOM),它导致了这个有趣的名称。在此处使用建议的修复:stackoverflow.com/questions/21624796/…

标签: r import


【解决方案1】:

在读取数据集时,使用read.csv/read.table 中的check.names = FALSE 来防止检查列名

dat <- read.csv("file.csv", check.names = FALSE)

check.names = TRUE(默认选项)触发make.namesmake.unique,如果列名不符合标准格式,它会更改列名,即如果列名以数字开头,它将在开头附加X ...


如果我们查看read.table的源代码

 ...

 if (check.names) 
        col.names <- make.names(col.names, unique = TRUE)

 ...

make.names 调用make.unique

make.names
function (names, unique = FALSE, allow_ = TRUE) 
{
    names <- as.character(names)
    names2 <- .Internal(make.names(names, allow_))
    if (unique) {
        o <- order(names != names2)
        names2[o] <- make.unique(names2[o])
    }
    names2
}

【讨论】:

  • 但是我原来的列名是“Id”,我觉得很正常,没有任何理由触发make.names之类的东西。
  • @Chris 你能用check.names = FALSE 阅读并得到dput(colnames(yourdata)) 我认为这个字符是一个特殊字符或者它之前可能有一个空格
  • 好的。实际上这是我朋友的一个问题,我只是好奇。我会告诉他并检查它是否有效!
猜你喜欢
  • 2022-01-14
  • 2014-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-26
  • 2018-11-18
  • 1970-01-01
  • 2021-10-18
相关资源
最近更新 更多