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

fxnxkyjh  于 2023-03-05  发布在  其他
关注(0)|答案(3)|浏览(159)

我开始使用readr导入CSV文件...如何处理标题名称中包含空格的CSV文件?
read_csv导入它们时带有空格(和特殊字符),这使我无法直接进入mutate和其他dplyr函数。
我该怎么办?
谢谢!

svmlkihl

svmlkihl1#

读入数据后,可以使用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接受“非法”字符并将其替换为句点,以防止在直接调用对象名称时出现任何语法错误/问题。
如果要删除重复的.,请添加-

colnames(df) <- gsub('(\\.)\\1+', '\\1', colnames(df))
colnames(df)
[1] "Higher.than.80.F."
xesrikrc

xesrikrc2#

当我导入一个在头中包含空格的csv文件时,我可以像往常一样使用dollar操作符访问它们。假设我有一个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), " ", "_")
x4shl7ld

x4shl7ld3#

另一种方法是使用janitor::clean_names()函数,它提供了多种转换列名的方法,默认值为snake_case

相关问题