使用readr中的read_csv导入标题中带有空格的CSV文件

时间:2017-09-22 15:27:32

标签: r readr

我开始使用readr导入带有read_csv的CSV文件...如何处理标题名称中包含空格的CSV文件?

read_csv使用空格(和特殊字符)导入它们,这阻止我直接使用mutate和其他dplyr函数。

我该如何处理?

谢谢!

2 个答案:

答案 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), " ", "_")