避免在使用read.csv()时将列名中的空格替换为句点(";)

避免在使用read.csv()时将列名中的空格替换为句点(";),r,names,read.csv,R,Names,Read.csv,我使用R做一些数据预处理,我面临的问题是:我使用read.csv(filename,header=TRUE)输入数据,然后变量名中的空格变为“.”,例如,在生成的数据框中,名为Full code的变量变为Full.code。处理后,我使用write.xlsx(文件名)导出结果,同时更改变量名。如何解决这个问题 此外,在output.xlsx文件中,第一列变为索引(即1到N),这不是我所期望的。要在名称中返回空格,请执行此操作(在导出之前,-R确实允许在变量名称中使用空格,但这很麻烦): #用空格

我使用R做一些数据预处理,我面临的问题是:我使用
read.csv(filename,header=TRUE)
输入数据,然后变量名中的空格变为“.”,例如,在生成的数据框中,名为Full code的变量变为Full.code。处理后,我使用
write.xlsx(文件名)
导出结果,同时更改变量名。如何解决这个问题


此外,在output.xlsx文件中,第一列变为索引(即1到N),这不是我所期望的。

要在名称中返回空格,请执行此操作(在导出之前,-R确实允许在变量名称中使用空格,但这很麻烦):

#用空格替换点的简单正则表达式
#这可能会产生意想不到的后果,所以一定要检查结果

名称(您的数据)如果您在读取数据时在
read.csv
中设置了
check.names=FALSE
,则不会更改名称,并且在将数据写回之前不需要编辑名称。当然,这意味着您需要在编辑时引用列名(在某些情况下使用反引号),或者按位置而不是名称引用列。

这里有一个函数(对不起,我知道它可以重构),它可以生成漂亮的列名,即使有多个连续点和尾随点:

makeColNamesUserFriendly <- function(ds) {
  # FIXME: Repetitive.

  # Convert any number of consecutive dots to a single space.
  names(ds) <- gsub(x = names(ds),
                    pattern = "(\\.)+",
                    replacement = " ")

  # Drop the trailing spaces.
  names(ds) <- gsub(x = names(ds),
                    pattern = "( )+$",
                    replacement = "")
  ds
}

makeColNamesUserFriendly为了补充已经提供的答案,这里有另一种方法,通过使用正则表达式和stringr包替换列名中的“.”或任何其他类型的点状标记,如下所示:

require(“stringr”)   
colnames(data) <- str_replace_all(colnames(data), "[:punct:]", " ")
我会给你

[1] "variable x" "variable y" "variable z"

您可以通过调用
read.csv
选项
check.names=FALSE
来避免修复名称。非常感谢!
gsub()
函数工作正常。但我仍然有一个问题:为什么我们应该使用两个转义,而不是简单地使用
pattern=“\.”“
?@zenotsang好问题-我不知道为什么R需要这样做。当R解析器解析字符串时,第一个转义就用光了,这会为正则表达式留下一个“\”。如果您绕过常规解析器,那么只需一个反斜杠就可以解决问题(但这可能比它值得做的工作要多)。显然,遵循R中的规则更好:)非常感谢!我认为使用
check.names=FALSE
比编辑列名更好,尽管重读数据对我来说需要做很多工作。总之,谢谢你的回答!这对我帮助很大。
require(“stringr”)   
colnames(data) <- str_replace_all(colnames(data), "[:punct:]", " ")
data <- data.frame(variable.x = 1:10, variable.y = 21:30, variable.z = "const")

colnames(data) <- str_replace_all(colnames(data), "[:punct:]", " ")
colnames(data)
[1] "variable x" "variable y" "variable z"