用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)
      )

如何替换所有的句号“。”在列名称中将其变为短划线“-”?

使用check.names=FALSEread.table时,我知道诸如data.frame之类的选项,但是在这种情况下,我不能使用它。

我还尝试了以下帖子的变体,但它们对我没有用。

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

谢谢。

解决方法

您可以使用gsub来替换姓名

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

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

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

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

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

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...