当前位置:  开发笔记 > 编程语言 > 正文

在使用管道运算符时将dplyr重命名应用于所有列

如何解决《在使用管道运算符时将dplyr重命名应用于所有列》经验,为你挑选了1个好方法。

我正在使用与下面的摘录对应的导入数据集:

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%>%.



1> Dave Gruenew..:

我知道这是一个老问题,我相信你现在已经找到了解决方案,但我在这里偶然发现了同样的问题,并最终找到了一些新方法.

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

推荐阅读
围脖上的博博_771
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有