重命名数据中连续列的子集。frame/tible 基于 R 中的名称索引
renaming a subset of contiguous columns in a data.frame/tible based on name-indexing in R
我想要 select 按列名排列的连续列的子集,并用字符向量重命名。
示例数据:
data<-data.frame(foo=1:4, bar=10:13, zoo_1=letters[1:4], zoo_2=letters[5:8])
foo bar zoo_1 zoo_2
1 1 10 a e
2 2 11 b f
3 3 12 c g
4 4 13 d h
要替换的列名:'bar'、'zoo_1'、'zoo_2'
新名字:
new_names<-c('a', 'b', 'c')
我想对 select 使用某种 : 运算符,例如,名称为 bar 的列为 zoo_2
我发现了一些奇怪的解决方案:
#1
names(data)[which(names(df)=='bar'):which(names(df)=='zoo_2')]<-new_names
和
#2
my_rename<-function(x,y,z){
names(x)[match(y, names(df))]<-z
names(x)
}
names(data)<-my_rename(data, c('bar', 'zoo_1', 'zoo_2'), c(new_names)
解决方案 #2 不好,因为它需要拼出所有要替换的名称。
解决方案 #1 允许我 select 'bar':'zoo_2' 样式的名称,但它非常冗长并且可能会让其他人感到困惑。我最感兴趣的是这个 (which:which) hack 的替代品。
有什么想法吗?
我们可以使用rename_at
library(dplyr)
data <- data %>%
rename_at(vars(bar:zoo_2), ~ new_names)
names(data)
#[1] "foo" "a" "b" "c"
然而,在 dplyr 1.05 中,rename_at
已被 rename_with
取代:
data2<-data %>%
rename_with(.cols=bar:zoo_2, ~ new_names)
> identical(data, data2)
[1] TRUE
我想要 select 按列名排列的连续列的子集,并用字符向量重命名。
示例数据:
data<-data.frame(foo=1:4, bar=10:13, zoo_1=letters[1:4], zoo_2=letters[5:8])
foo bar zoo_1 zoo_2
1 1 10 a e
2 2 11 b f
3 3 12 c g
4 4 13 d h
要替换的列名:'bar'、'zoo_1'、'zoo_2'
新名字:
new_names<-c('a', 'b', 'c')
我想对 select 使用某种 : 运算符,例如,名称为 bar 的列为 zoo_2
我发现了一些奇怪的解决方案:
#1
names(data)[which(names(df)=='bar'):which(names(df)=='zoo_2')]<-new_names
和
#2
my_rename<-function(x,y,z){
names(x)[match(y, names(df))]<-z
names(x)
}
names(data)<-my_rename(data, c('bar', 'zoo_1', 'zoo_2'), c(new_names)
解决方案 #2 不好,因为它需要拼出所有要替换的名称。
解决方案 #1 允许我 select 'bar':'zoo_2' 样式的名称,但它非常冗长并且可能会让其他人感到困惑。我最感兴趣的是这个 (which:which) hack 的替代品。
有什么想法吗?
我们可以使用rename_at
library(dplyr)
data <- data %>%
rename_at(vars(bar:zoo_2), ~ new_names)
names(data)
#[1] "foo" "a" "b" "c"
然而,在 dplyr 1.05 中,rename_at
已被 rename_with
取代:
data2<-data %>%
rename_with(.cols=bar:zoo_2, ~ new_names)
> identical(data, data2)
[1] TRUE