如何删除'。'来自数据框中的列名?

时间:2015-04-26 17:37:56

标签: r

我从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个或更多列的文件。

同样,我想删除"。"从所有的名字。我想这样做,所以我可以使用" sqldf"这些命令不能很好地处理"。"

感谢您的帮助

3 个答案:

答案 0 :(得分:16)

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

答案 1 :(得分:6)

要替换名称中的所有点,您需要使用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

答案 2 :(得分:1)

更新dplyr 0.8.0

从dplyr 0.8 funs()开始已弃用,请使用公式符号。

使用dplyr的{​​{1}}方法。

stringr

确保使用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是通配符。