在 R 中的所有列名中替换多个句点

Substitute multiple periods in all column names in R

我有以下 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 "."

谢谢。

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

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

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

但请注意 - 是变量名称的 non-standard 字符。如果您尝试将这些列与使用 non-standard 评估的函数一起使用,则需要将 back-ticks 中的名称括起来才能使用它们。例如

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

gsub("\.", "-", names(df))是regex(正则表达式)方式。 . 是正则表达式中的一个特殊符号,表示“匹配任何单个字符”。这就是 MrFlick 的回答中包含 fixed = TRUE 论点的原因。

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