首页 > 解决方案 > 仅修改某些列的名称

问题描述

我有一个像original一样的数据集。

id <- c(1,1,1,2,3,3,3,4,4)
period <- c(1,1,2,2,1,2,3,1,3)
iso_1 <- c(1,0,0,0,1,1,0,1,1)
iso_2 <- c(1,1,1,0,0,1,0,1,1)
iso_3 <- c(1,0,1,0,0,1,0,0,1)

original <- data.frame(id, period, iso_1, iso_2, iso_3)

我喜欢修改具有模式“iso_name”的列名并添加“_exp”,所以它看起来像“iso_name_exp”。新数据集如下所示:

iso_1_exp <- c(1,0,0,0,1,1,0,1,1)
iso_2_exp <- c(1,1,1,0,0,1,0,1,1)
iso_3_exp <- c(1,0,1,0,0,1,0,0,1)
new <- data.frame(id, period, iso_1_exp, iso_2_exp, iso_3_exp)

我确实尝试了以下行:

n <- ncol(original)
colnames(original)[,3:n] <- paste0(colnames(original)[,3:n],"_exp")

然而它并没有成功。

任何的想法?谢谢

标签: rdplyrrenamenames

解决方案


使用dplyr

library(dplyr)
original %>% rename_with(~paste0(., '_exp'), starts_with('iso'))

#  id period iso_1_exp iso_2_exp iso_3_exp
#1  1      1         1         1         1
#2  1      1         0         1         0
#3  1      2         0         1         1
#4  2      2         0         0         0
#5  3      1         1         0         0
#6  3      2         1         1         1
#7  3      3         0         0         0
#8  4      1         1         1         0
#9  4      3         1         1         1

基数 R:

cols <- grep('^iso', names(original))
names(original)[cols] <- paste0(names(original)[cols], '_exp')

推荐阅读