如何更换“。”在read.csv()生成的列名中导出时是否有单个空格?

时间:2013-06-17 16:34:29

标签: r read.csv

我正在使用R进行一些数据预处理,这是我遇到的问题:我使用read.csv(filename,header=TRUE)输入数据,然后变量名称中的空格变为“。”,例如,名为完整代码的变量在生成的数据帧中变为 Full.Code 。处理完毕后,我使用write.xlsx(filename)导出结果,同时更改变量名称。如何解决这个问题?

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

4 个答案:

答案 0 :(得分:33)

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

答案 1 :(得分:9)

要在名称中取回空格,请执行此操作(在导出之前 - R确实允许您在变量名中包含空格,但这很痛苦):

# A simple regular expression to replace dots with spaces
# This might have unintended consequences, so be sure to check the results
names(yourdata) <- gsub(x = names(yourdata),
                        pattern = "\\.",
                        replacement = " ")

要删除第一列索引,只需将row.names = FALSE添加到write.xlsx()即可。这是以表格格式写出数据的函数的常见参数(write.csv()也有它。)

答案 2 :(得分:4)

这是一个功能(对不起,我知道它可以被重构),即使有多个连续的点和尾随点,它也会产生漂亮的列名:

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
}

使用示例:

ds <- makeColNamesUserFriendly(ds)

答案 3 :(得分:1)

只是为了添加已经提供的答案,这里是另一种方法,通过使用带有stringr包的正则表达式替换列名中的“。”或任何其他类型的标点符号,如下所示:

min

例如尝试:

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)