Kon*_*rad 10 syntax r dataframe dplyr
我正在使用与下面的摘录对应的导入数据集:
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)
Run Code Online (Sandbox Code Playgroud)
我正在使用这些数据进行一些清理dplyr,我想将列名更改为语法正确的,并删除标点符号作为第二步.到目前为止我尝试了什么:
dta_cln <- dta %>%
rename(make.names(names(dta)))
Run Code Online (Sandbox Code Playgroud)
生成错误:
Run Code Online (Sandbox Code Playgroud)> dta_clean <- dta %>% + rename(make.names(names(dta))) Error: All arguments to rename must be named.
我想要实现的目标可以在基础上完成:
names(dta) <- gsub("[[:punct:]]","",make.names(names(dta)))
Run Code Online (Sandbox Code Playgroud)
将返回:
Run Code Online (Sandbox Code Playgroud)> names(dta) [1] "ThisisColumnOne" "AnotheramazingColumnname" "XThisColumnsissospecial"
我想达到相同的效果,但使用dyplr和%>%.
use*_*745 21
使用管道设置列名,如下所示:
iris %>% `colnames<-`(c("newcol1", "newcol2", "newcol3", "newcol4", "newcol5"))
Run Code Online (Sandbox Code Playgroud)
哪个返回
newcol1 newcol2 newcol3 newcol4 newcol5
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
Run Code Online (Sandbox Code Playgroud)
Dav*_*ald 16
我知道这是一个老问题,我相信你现在已经找到了解决方案,但我在这里偶然发现了同样的问题,并最终找到了一些新方法.
使用dplyr 0.6.0及以上,现在有一个rename_all功能:
dta %>%
rename_all(funs(gsub("[[:punct:]]", "", make.names(names(dta)))))
Run Code Online (Sandbox Code Playgroud)
哪个有效,但对我来说有点麻烦.如果您想要更灵活dplyr,您还可以致电:
rename_atrename_if这是一个非常好的包(有很多额外的实用程序),可以轻松清理列名:
library(janitor)
dta %>%
clean_names()
Run Code Online (Sandbox Code Playgroud)
这将重命名并清除所有列名称到以下内容:
[1] "this_is_column_one" "another_amazing_column_name" "x_this_columns_is_so_special"
Run Code Online (Sandbox Code Playgroud)
一切都变成了snake_case而不是CamelCase,但总体clean_names上它处理的列名非常灵活.如果这是一个交易破坏者,你可以在函数中使用另一个包snakecase来实现其功能......虽然这开始变得有点太深奥了to_big_camel_case()rename_all
mtcars %>%
data.table::setnames(
old = mtcars %>% names(),
new = mtcars %>% names() %>% paste0("_new_name")
)
Run Code Online (Sandbox Code Playgroud)
setnames包中的功能data.table是重命名数据框中的列名。old和new是这个函数中我们需要的两个参数。
mtcars %>% names()mtcars以管道方式输出数据框的列名%>%,因此您也可以使用names(mtcars). 它们是同一件事。
在这个最小的示例中,我重命名了管道中的列名称%>%,并使用函数添加了带有后缀的所有旧列名称paste0。您可以添加前缀、后缀或其他规则。
| 归档时间: |
|
| 查看次数: |
9642 次 |
| 最近记录: |