【发布时间】:2017-09-22 15:27:32
【问题描述】:
我开始使用readr 导入带有read_csv 的CSV 文件...如何处理标题名称中包含空格的CSV 文件?
read_csv 使用空格(和特殊字符)导入它们,这使我无法直接使用 mutate 和其他 dplyr 函数。
我该如何处理?
谢谢!
【问题讨论】:
我开始使用readr 导入带有read_csv 的CSV 文件...如何处理标题名称中包含空格的CSV 文件?
read_csv 使用空格(和特殊字符)导入它们,这使我无法直接使用 mutate 和其他 dplyr 函数。
我该如何处理?
谢谢!
【问题讨论】:
读入数据后可以使用make.names。
df <- data.frame(x=NA)
colnames(df) <- c("This col name has spaces")
colnames(df) <- make.names(colnames(df), unique=TRUE)
它将返回带有句点而不是空格作为分隔符的列名。
colnames(df)
[1] "This.col.name.has.spaces"
根据帮助页面make.names接受一个字符向量并返回一个:
由字母、数字和点或点组成的语法上有效的名称 下划线字符并以字母或不跟随的点开头 一个数字
编辑:包括一个带有特殊字符的示例。
df <- data.frame(x=NA)
colnames(df) <- c("Higher than 80(°F)")
colnames(df) <- make.names(colnames(df), unique=TRUE)
colnames(df)
[1] "Higher.than.80..F."
如您所见,make.names 采用“非法”字符并将其替换为句点,以防止直接调用对象名称时出现任何语法错误/问题。
如果你想删除重复的.'s 然后添加-
colnames(df) <- gsub('(\\.)\\1+', '\\1', colnames(df))
colnames(df)
[1] "Higher.than.80.F."
【讨论】:
read_csv 导入度数符号时可能会导致错误(我还没尝试过,一旦有就会更新!)...
read_csv 且标题包含度数符号的 CSV 文件时,我得到“Temperature..U.00B0.F”,而 read.csv 返回“Temperature..F”
当我导入包含标题中空格的 csv 时,我实际上可以像往常一样使用美元运算符访问它们。假设我有一个这样的 data.frame (df):
a a b b
1 1 1
2 1 2
其中“a a”是第一列的名称,而“b b”是第二列的名称,我可以得到第一列
df$`a a`
但是如果你想改变它们,你可以像这样重命名它们:
names(df) <- c("a_a", "b_b")
您分配的向量只需与 data.frame 的列具有相同的长度。更优雅的方式是使用 stringr 包。如果你想用下划线替换所有空格,只需输入:
library(stringr)
names(df) <- str_replace_all(names(df), " ", "_")
【讨论】: