我想根据列数设置列名。
例如,
#iris1 <- iris[,1:4]
if(ncol(iris)==4) colnames(iris) <- c("a","b","c","d")
if(ncol(iris)==5) colnames(iris) <- c("a","b","c","d","e")
我正在寻找一种使用dplyr管道进行此操作的方法。像这样:
iris1 %>%
setNames(ifelse(ncol(.)==4,c("a","b","c","d"),c("a","b","c","d","e")))
更新: akrun的回答给了我这个想法,在这个特定用例中对我有用。
cnames <- c("a","b","c","d","e")
iris1 %>% setNames(cnames[1:ncol(.)])
该解决方案不能一概而论。欢迎提供更好的解决方案。
如果这是基于用户输入“ n”的,那么我们可以使用 rename_at
library(dplyr)
n <- 4
iris %>%
rename_at(seq_len(n), ~ letters[seq_len(n)])
可以包装成一个函数
rename_fn <- function(dat, n){
dat %>%
rename_at(seq_len(n), ~ letters[seq_len(n)])
}
rename_fn(iris, 4)
rename_fn(iris, 5)
如果要更改数据集的所有列,则更简单的选择是 set_names
iris %>%
set_names(cnames[seq_len(ncol(.))])
或在 base R
setNames(iris, cnames[seq_len(ncol(iris))])
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句