【问题标题】:How to remove '.' from column names in a dataframe?如何删除“。”从数据框中的列名?
【发布时间】:2015-04-26 17:37:55
【问题描述】:

我从 csv 文件中读取的数据框具有这样的列名

abc.def, ewf.asd.fkl, qqit.vsf.addw.coil

我想删除 '.'从所有名称中转换为

abcdef, eqfasdfkl, qqitvsfaddwcoil.

我尝试使用子命令sub(".","",colnames(dataframe))但是这个命令取出了每个列名的第一个字母并且列名更改为

bc.def, wf.asd.fkl, qit.vsf.addw.coil

任何人都知道执行此操作的另一个命令。我可以一一更改列名,但我有很多文件,每个文件中有 30 列或更多列。

再次,我想删除“。”从所有的colnames。我正在尝试这样做,以便可以使用“sqldf”命令,这些命令不能很好地处理“。”

感谢您的帮助

【问题讨论】:

    标签: r


    【解决方案1】:

    1) 如果您引用名称,sqldf 可以处理其中包含点的名称:

    library(sqldf)
    d0 <- read.csv(text = "A.B,C.D\n1,2")
    sqldf('select "A.B", "C.D" from d0')
    

    给予:

      A.B C.D
    1   1   2
    

    2) 使用read.tableread.csv 读取数据时,请使用check.names=FALSE 参数。

    比较:

    Lines <- "A B,C D
    1,2
    3,4"
    read.csv(text = Lines)
    ##   A.B C.D
    ## 1   1   2
    ## 2   3   4
    read.csv(text = Lines, check.names = FALSE)
    ##   A B C D
    ## 1   1   2
    ## 2   3   4
    

    然而,在这个例子中,它仍然留下了一个必须在 sqldf 中引用的名称,因为名称中嵌入了空格。

    3) 如果DF 是数据框,则简单地删除句点:

    names(DF) <- gsub(".", "", names(DF), fixed = TRUE)
    

    或者将句点转换为下划线可能会更好,以便它是可逆的:

    names(DF) <- gsub(".", "_", names(DF), fixed = TRUE)
    

    最后一行也可以这样完成:

    names(DF) <- chartr(".", "_", names(DF))
    

    【讨论】:

      【解决方案2】:

      要替换名称中的所有点,您需要使用 gsub,而不是 sub,它只会替换第一次出现的位置。

      这应该可行。

      test <- data.frame(abc.def = NA, ewf.asd.fkl = NA, qqit.vsf.addw.coil = NA)
      names(test) <- gsub( ".",  "", names(test), fixed = TRUE)
      test
        abcdef ewfasdfkl qqitvsfaddwcoil
      1     NA        NA              NA
      

      【讨论】:

      • sub vs gsub 是一个很好的观点,但由于 OP 也需要 fixed = TRUE,所以最好解释一下。
      【解决方案3】:

      更新 dplyr 0.8.0

      从 dplyr 0.8 开始,funs() 已软弃用,请使用公式表示法。

      使用stringrdplyr 方法来执行此操作。

      library(dplyr)
      library(stringr)
      
      data <- data.frame(abc.def = 1, ewf.asd.fkl = 2, qqit.vsf.addw.coil = 3)
      renamed_data <- data %>%
        rename_all(~str_replace_all(.,"\\.","_")) # note we have to escape the '.' character with \\
      

      确保使用install.packages() 安装软件包。

      请记住,您必须在正则表达式中使用\\. 转义. 字符,其功能类似于str_replace_all 使用,. 是通配符。

      【讨论】:

      • 我认为如果在顶部包含当前版本,而不是在底部的 edit 中,这将是一个更好的答案。 (如果您想保留旧版本,将其粘贴在底部会更合适。)此外,在 R 中说 . 是通配符是不正确的 - . 是正则表达式中的通配符。另一个不错的选择是使用fixed(".") 而不是"\\."。这些数据太小了,但fixed() 在处理大数据时会快很多。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-09-29
      • 1970-01-01
      • 1970-01-01
      • 2011-07-11
      • 2019-10-24
      相关资源
      最近更新 更多