我正在使用与下面的摘录对应的导入数据集:
set.seed(1) dta <- data.frame("This is Column One" = runif(n = 10), "Another amazing Column name" = runif(n = 10), "!## This Columns is so special€€€" = runif(n = 10), check.names = FALSE)
我正在使用这些数据进行一些清理dplyr
,我想将列名更改为语法正确的,并删除标点符号作为第二步.到目前为止我尝试了什么:
dta_cln <- dta %>% rename(make.names(names(dta)))
生成错误:
期望的结果> dta_clean <- dta %>% + rename(make.names(names(dta))) Error: All arguments to rename must be named.
我想要实现的目标可以在基础上完成:
names(dta) <- gsub("[[:punct:]]","",make.names(names(dta)))
将返回:
> names(dta) [1] "ThisisColumnOne" "AnotheramazingColumnname" "XThisColumnsissospecial"
我想达到相同的效果,但使用dyplr
和%>%
.
我知道这是一个老问题,我相信你现在已经找到了解决方案,但我在这里偶然发现了同样的问题,并最终找到了一些新方法.
Dplyr使用dplyr 0.6.0
及以上,现在有一个rename_all
功能:
dta %>% rename_all(funs(gsub("[[:punct:]]", "", make.names(names(dta)))))
哪个有效,但对我来说有点麻烦.如果您想要更灵活dplyr
,您还可以致电:
rename_at
rename_if
门警
这是一个非常好的包(有很多额外的实用程序),可以轻松清理列名:
library(janitor) dta %>% clean_names()
这将重命名并清除所有列名称到以下内容:
[1] "this_is_column_one" "another_amazing_column_name" "x_this_columns_is_so_special"
一切都变成了snake_case而不是CamelCase,但总体clean_names
上它处理的列名非常灵活.如果这是一个交易破坏者,你可以在函数中使用另一个包snakecase
来实现其功能......虽然这开始变得有点太深奥了to_big_camel_case()
rename_all