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

Ami*_*har 8 r

我从csv文件中读取的数据帧具有这样的列名

abc.def, ewf.asd.fkl, qqit.vsf.addw.coil

我想删除'.' 从所有的名称,并将其转换为

abcdef, eqfasdfkl, qqitvsfaddwcoil.

我尝试使用sub命令, sub(".","",colnames(dataframe))但是此命令取出了每个列名的第一个字母,并且列名更改为

bc.def, wf.asd.fkl, qit.vsf.addw.coil

任何人都知道这样做的另一个命令.我可以逐个更改列名,但是我有很多文件,每个文件中有30个或更多列.

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

谢谢您的帮助

G. *_*eck 17

1)如果引用名称,sqldf可以处理其中包含点的名称:

library(sqldf)
d0 <- read.csv(text = "A.B,C.D\n1,2")
sqldf('select "A.B", "C.D" from d0')
Run Code Online (Sandbox Code Playgroud)

赠送:

  A.B C.D
1   1   2
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

但是,在此示例中,它仍然留下一个必须在sqldf中引用的名称,因为名称具有嵌入空格.

3)要简单地删除句点,if DF是数据框:

names(DF) <- gsub(".", "", names(DF), fixed = TRUE)
Run Code Online (Sandbox Code Playgroud)

或者将句点转换为下划线以使其可逆是更好的:

names(DF) <- gsub(".", "_", names(DF), fixed = TRUE)
Run Code Online (Sandbox Code Playgroud)

这最后一行可以像这样:

names(DF) <- chartr(".", "_", names(DF))
Run Code Online (Sandbox Code Playgroud)


r.b*_*bot 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
Run Code Online (Sandbox Code Playgroud)


bla*_*eam 5

更新 dplyr 0.8.0

由于 dplyr 0.8funs()已被软弃用,请使用公式表示法。

一种dplyr使用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 \\
Run Code Online (Sandbox Code Playgroud)

确保使用install.packages().

请记住,您必须.使用\\.in regex对字符进行转义,其功能类似于str_replace_alluse, .是通配符。