仅修改部分列的名称
Modify names only for some columns
我有一个类似 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”。 new 数据集如下所示:
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")
然而它并没有成功。
有什么想法吗?
谢谢
使用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')
在 base R 中你可以通过索引修改:
colnames(original)[3:5] <- paste(colnames(original)[3:5], "exp", sep = "_")
或者如果多列到 last(n) 你可以使用 ncol()
:
colnames(original)[3:ncol(original)] <- paste(colnames(original)[3:ncol(original)], "exp", sep = "_")
original
输出:
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
我们可以使用
library(stringr)
library(dplyr)
original %>%
rename_with(~str_c(., '_exp'), starts_with('iso'))
我有一个类似 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”。 new 数据集如下所示:
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")
然而它并没有成功。
有什么想法吗? 谢谢
使用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')
在 base R 中你可以通过索引修改:
colnames(original)[3:5] <- paste(colnames(original)[3:5], "exp", sep = "_")
或者如果多列到 last(n) 你可以使用 ncol()
:
colnames(original)[3:ncol(original)] <- paste(colnames(original)[3:ncol(original)], "exp", sep = "_")
original
输出:
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
我们可以使用
library(stringr)
library(dplyr)
original %>%
rename_with(~str_c(., '_exp'), starts_with('iso'))