我正在使用R进行一些数据预处理,这是我遇到的问题:我使用read.csv(filename,header=TRUE)
输入数据,然后变量名称中的空格变为“。”,例如,名为完整代码的变量在生成的数据帧中变为 Full.Code 。处理完毕后,我使用write.xlsx(filename)
导出结果,同时更改变量名称。如何解决这个问题?
此外,在输出 .xlsx 文件中,第一列成为索引(即,1到N),这不是我所期望的。
答案 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)