【问题标题】:Substitute multiple periods in all column names in R [duplicate]在R中的所有列名中替换多个句点[重复]
【发布时间】:2020-12-13 15:29:57
【问题描述】:

我有以下data.frame。

 df = data.frame(a.dfs.56=c(rep("a",8), rep("b",5), rep("c",7), rep("d",10)), 
      b.fqh.28=rnorm(30, 6, 2), 
      c.34.2.fgs=rnorm(30, 12, 3.5), 
      d.tre.19.frn=rnorm(30, 8, 3)
      )

如何替换所有句点“。”在列名中让它们变成破折号“-”?

在使用read.tabledata.frame 时,我知道check.names=FALSE 之类的选项,但在这种情况下,我不能使用它。

我也尝试过以下帖子的变体,但它们对我不起作用。

Specifying column names in a data.frame changes spaces to "."

How can I use gsub in multiple specific column in r

R gsub column names in all data frames within a list

谢谢。

【问题讨论】:

标签: r dataframe rename substitution


【解决方案1】:

gsub("\\.", "-", names(df)) 是正则表达式(正则表达式)方式。 . 是正则表达式中的一个特殊符号,表示“匹配任何单个字符”。这就是为什么 fixed = TRUE 参数包含在 MrFlick 的答案中。

\\(转义)告诉 R,我们不需要文字句点,也不需要它所代表的特殊符号。

【讨论】:

  • 我不知道。非常感谢您的解释 - Syl。
【解决方案2】:

您可以使用gsub 进行名称替换

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

请注意,您需要fixed=TRUE,因为通常gsub 需要正则表达式,而. 是一个特殊的正则表达式字符。

但请注意,- 是变量名的非标准字符。如果您尝试将这些列与使用非标准评估的函数一起使用,则需要将名称括在反引号中以使用它们。例如

dplyr::filter(df, `a-dfs-56`=="a")

【讨论】:

  • 哦,这真的很酷!这就是为什么 gsub 不适合我的原因 :) 太棒了!
猜你喜欢
  • 2019-06-18
  • 1970-01-01
  • 2019-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-05
  • 1970-01-01
相关资源
最近更新 更多