我开始使用readr导入CSV文件...如何处理标题名称中包含空格的CSV文件?read_csv导入它们时带有空格(和特殊字符),这使我无法直接进入mutate和其他dplyr函数。我该怎么办?谢谢!
readr
read_csv
mutate
dplyr
svmlkihl1#
读入数据后,可以使用make.names。
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."
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), " ", "_")
x4shl7ld3#
另一种方法是使用janitor::clean_names()函数,它提供了多种转换列名的方法,默认值为snake_case。
janitor::clean_names()
snake_case
3条答案
按热度按时间svmlkihl1#
读入数据后,可以使用
make.names
。它将返回以句点而不是空格作为分隔符的列名。
根据帮助页面,
make.names
获取字符向量并返回:语法上有效的名称,由字母、数字和点或下划线字符组成,并且以字母或点开头,后面不跟数字
编辑:包括一个带有特殊字符的示例。
正如您所看到的,
make.names
接受“非法”字符并将其替换为句点,以防止在直接调用对象名称时出现任何语法错误/问题。如果要删除重复的
.
,请添加-xesrikrc2#
当我导入一个在头中包含空格的csv文件时,我可以像往常一样使用dollar操作符访问它们。假设我有一个data.frame(df),如下所示:
其中“a a”是第一列的名称,“B b”是第二列的名称,我可以使用以下命令获得第一列
但如果你想改变他们无论如何你可以只重命名他们这样:
你要赋值的向量只需要和data.frame的列长度相同,一个稍微优雅一点的方法是使用stringr包,如果你想用下划线替换所有空格,只需输入:
x4shl7ld3#
另一种方法是使用
janitor::clean_names()
函数,它提供了多种转换列名的方法,默认值为snake_case
。