我开始使用readr
导入带有read_csv
的CSV文件...如何处理标题名称中包含空格的CSV文件?
read_csv
使用空格(和特殊字符)导入它们,这阻止我直接使用mutate
和其他dplyr
函数。
我该如何处理?
谢谢!
答案 0 :(得分:2)
您在阅读数据后可以使用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
采取非法行为&#39;字符并用句点替换它们,以防止在直接调用对象名称时出现语法错误/问题。
如果您想删除重复的.
,请添加 -
colnames(df) <- gsub('(\\.)\\1+', '\\1', colnames(df))
colnames(df)
[1] "Higher.than.80.F."
答案 1 :(得分:1)
当我在标题中导入包含空格的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), " ", "_")