我在用R做一些数据预处理,遇到的问题是:我用 输入数据read.csv(filename,header=TRUE)
,然后变量名中的空格变成了“.”,比如一个叫Full Code的变量就变成了Full.Code在生成的数据框中。处理后,我使用write.xlsx(filename)
导出结果,同时更改变量名称。如何解决这个问题?
此外,在输出.xlsx文件中,第一列成为索引(即 1 到 N),这不是我所期望的。
如果您check.names=FALSE
在read.csv
读取数据时设置,则名称将不会更改,并且您无需在写回数据之前对其进行编辑。这当然意味着您需要在编辑时引用列名(在某些情况下为反引号)或按位置而不是名称引用列。
要在名称中取回空格,请执行以下操作(在导出之前 - 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()
也有)。
这是一个函数(对不起,我知道它可以被重构),即使有多个连续的点和尾随点,它也会生成漂亮的列名:
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)
只是为了补充已经提供的答案,这是替换“。”的另一种方法。或任何其他类型的列名中的标点符号,通过使用带有 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"