22

我在用R做一些数据预处理,遇到的问题是:我用 输入数据read.csv(filename,header=TRUE),然后变量名中的空格变成了“.”,比如一个叫Full Code的变量就变成了Full.Code在生成的数据框中。处理后,我使用write.xlsx(filename)导出结果,同时更改变量名称。如何解决这个问题?

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

4

4 回答 4

40

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

于 2013-06-18T15:45:42.320 回答
10

要在名称中取回空格,请执行以下操作(在导出之前 - 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()也有)。

于 2013-06-17T16:39:13.540 回答
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)
于 2014-08-23T16:08:13.080 回答
4

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

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"
于 2018-06-11T19:25:32.997 回答