重命名包含特定字符串的所有列名
Rename all column names that include a certain string
假设我有一个包含 6 列的数据集,我想替换列名称中的字符串,包括字符串“likes_comment”到字符串“number_likes”。
示例数据:
da = data.frame(likes_comment_1 = c(1,2,3,4), likes_comment_2 = c(2,2,3,1), likes_comment_3=c(5,2,3,1), quotes_comment1=c(2,1,3,4), quotes_comment2_=c(3,5,7,1), quotes_comment3=c(2,3,1,2))
da
likes_comment_1 likes_comment_2 likes_comment_3 quotes_comment1 quotes_comment2_ quotes_comment3
1 1 2 5 2 3 2
2 2 2 2 1 5 3
3 3 3 3 3 7 1
4 4 1 1 4 1 2
目标数据:
target_da = data.frame(number_likes_1 = c(1,2,3,4), number_likes_2 = c(2,2,3,1), number_likes_3=c(5,2,3,1), quotes_comment1=c(2,1,3,4), quotes_comment2_=c(3,5,7,1), quotes_comment3=c(2,3,1,2))
target_da
number_likes_1 number_likes_2 number_likes_3 quotes_comment1 quotes_comment2_ quotes_comment3
1 1 2 5 2 3 2
2 2 2 2 1 5 3
3 3 3 3 3 7 1
4 4 1 1 4 1 2
我该怎么做?
这个有用吗:
names(da)[grepl('likes_comment',names(da))] <- gsub('likes_comment','number_likes',names(da)[grepl('likes_comment',names(da))])
da
number_likes_1 number_likes_2 number_likes_3 quotes_comment1 quotes_comment2_ quotes_comment3
1 1 2 5 2 3 2
2 2 2 2 1 5 3
3 3 3 3 3 7 1
4 4 1 1 4 1 2
使用sub
:
names(da) <- sub("likes_comment_(\d+)", "number_likes_\1", names(da))
你可以使用rename_with
-
library(dplyr)
library(stringr)
da %>% rename_with(~str_replace(., 'likes_comment', 'number_likes'))
# number_likes_1 number_likes_2 number_likes_3 quotes_comment1
#1 1 2 5 2
#2 2 2 2 1
#3 3 3 3 3
#4 4 1 1 4
# quotes_comment2_ quotes_comment3
#1 3 2
#2 5 3
#3 7 1
#4 1 2
因为 OP 被标记为 data.table
:
library(data.table)
setnames(da, sub('likes_comment', 'number_likes', names(da), fixed = TRUE))
假设我有一个包含 6 列的数据集,我想替换列名称中的字符串,包括字符串“likes_comment”到字符串“number_likes”。
示例数据:
da = data.frame(likes_comment_1 = c(1,2,3,4), likes_comment_2 = c(2,2,3,1), likes_comment_3=c(5,2,3,1), quotes_comment1=c(2,1,3,4), quotes_comment2_=c(3,5,7,1), quotes_comment3=c(2,3,1,2))
da
likes_comment_1 likes_comment_2 likes_comment_3 quotes_comment1 quotes_comment2_ quotes_comment3
1 1 2 5 2 3 2
2 2 2 2 1 5 3
3 3 3 3 3 7 1
4 4 1 1 4 1 2
目标数据:
target_da = data.frame(number_likes_1 = c(1,2,3,4), number_likes_2 = c(2,2,3,1), number_likes_3=c(5,2,3,1), quotes_comment1=c(2,1,3,4), quotes_comment2_=c(3,5,7,1), quotes_comment3=c(2,3,1,2))
target_da
number_likes_1 number_likes_2 number_likes_3 quotes_comment1 quotes_comment2_ quotes_comment3
1 1 2 5 2 3 2
2 2 2 2 1 5 3
3 3 3 3 3 7 1
4 4 1 1 4 1 2
我该怎么做?
这个有用吗:
names(da)[grepl('likes_comment',names(da))] <- gsub('likes_comment','number_likes',names(da)[grepl('likes_comment',names(da))])
da
number_likes_1 number_likes_2 number_likes_3 quotes_comment1 quotes_comment2_ quotes_comment3
1 1 2 5 2 3 2
2 2 2 2 1 5 3
3 3 3 3 3 7 1
4 4 1 1 4 1 2
使用sub
:
names(da) <- sub("likes_comment_(\d+)", "number_likes_\1", names(da))
你可以使用rename_with
-
library(dplyr)
library(stringr)
da %>% rename_with(~str_replace(., 'likes_comment', 'number_likes'))
# number_likes_1 number_likes_2 number_likes_3 quotes_comment1
#1 1 2 5 2
#2 2 2 2 1
#3 3 3 3 3
#4 4 1 1 4
# quotes_comment2_ quotes_comment3
#1 3 2
#2 5 3
#3 7 1
#4 1 2
因为 OP 被标记为 data.table
:
library(data.table)
setnames(da, sub('likes_comment', 'number_likes', names(da), fixed = TRUE))