微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

仅修改某些列的名称

如何解决仅修改某些列的名称

我有一个类似原始的数据集。

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

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

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

iso_1_exp <- c(1,1)
iso_2_exp <- c(1,1)
iso_3_exp <- c(1,1)
new <- data.frame(id,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')
,

在基础 R 中,您可以通过索引进行修改:

colnames(original)[3:5] <-  paste(colnames(original)[3:5],"exp",sep = "_")

或者在多列到最后(n)列的情况下,您可以使用ncol()

colnames(original)[3:ncol(original)] <-  paste(colnames(original)[3:ncol(original)],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(.,starts_with('iso'))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。