问题描述
我有以下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=FALSE
或read.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我们不需要字面量,也不是它所代表的特殊符号。