如何在R语言中为tibble动态添加新列名?
动态为合并后的Tibble设置列名
问题场景
现有如下代码生成两个Tibble(tmp存储列总和、tmp2存储列总和占比),合并后需要动态生成格式为c1、c2...、c1_prop、c2_prop的列名,无需手动逐个定义,适配列数随时变化的情况:
tmp <- tibble() tmp2 <- tibble() tmp <- tmp %>% rbind( colSums( y_matrix) ) tmp2 <- tmp2 %>% rbind( proportions( colSums( y_matrix ))) data <- bind_cols(tmp,tmp2)
实现方法
推荐直接在生成tmp和tmp2时就设置好动态列名,再合并,代码更简洁高效:
# 获取y_matrix的列数,用于动态生成列名 n_cols <- ncol(y_matrix) # 生成tmp(列总和),直接设置c1、c2...格式的列名 tmp <- tibble(!!!set_names(colSums(y_matrix), paste0("c", 1:n_cols))) # 生成tmp2(列总和占比),直接设置c1_prop、c2_prop...格式的列名 tmp2 <- tibble(!!!set_names(proportions(colSums(y_matrix)), paste0("c", 1:n_cols, "_prop"))) # 合并后直接得到带目标列名的data data <- bind_cols(tmp, tmp2)
关键逻辑说明
paste0("c", 1:n_cols):根据列数动态生成c1、c2...的列名字符向量;paste0("c", 1:n_cols, "_prop")同理生成带_prop后缀的列名。set_names(...):给colSums和proportions返回的向量设置自定义名字。!!!:将命名向量展开为Tibble的列,确保列名直接应用到Tibble中。
如果要保留原代码的合并后修改列名的逻辑,也可以这样做:
tmp <- tibble() %>% rbind(colSums(y_matrix)) tmp2 <- tibble() %>% rbind(proportions(colSums(y_matrix))) data <- bind_cols(tmp, tmp2) # 动态生成列名并赋值 n_cols <- ncol(tmp) colnames(data) <- c(paste0("c", 1:n_cols), paste0("c", 1:n_cols, "_prop"))
内容的提问来源于stack exchange,提问作者san
相关产品推荐
相关产品推荐

