更改字符向量的选定元素

时间:2013-09-19 15:10:59

标签: r dataframe

以下原则是否有较短版本重命名数据框的某些列?

data1<-data.frame("a"=1:3,"b"=1:3,"c"=1:3)

data1Names<-names(data1)
data1Names[data1Names=="a"]<-"hello"
data1Names[data1Names=="c"]<-"world"
names(data1)<-data1Names

4 个答案:

答案 0 :(得分:5)

data.table包具有setnames功能,适用于data.frames

library(data.table)
data1<-data.frame("a"=1:3,"b"=1:3,"c"=1:3)
#setnames(data1, "a", "hello")
#setnames(data1, "c", "world")
# or in one step
setnames(data1, c("a", "c"), c("hello", "world"))
data1
#  hello b world
#1     1 1     1
#2     2 2     2
#3     3 3     3

到目前为止,所有答案都会复制data.framesetnames具有额外的好处,即它可以通过引用更改名称,而无需复制data.frame

答案 1 :(得分:4)

setNames可以提供帮助

> setNames(data1, c("hello", "b", "world"))
  hello b world
1     1 1     1
2     2 2     2
3     3 3     3

另一种选择

> names(data1)[names(data1) %in% c("a", "c")] <- c("hello", "world")
> data1
  hello b world
1     1 1     1
2     2 2     2
3     3 3     3

答案 2 :(得分:4)

使用match替换所选元素并在使用names<-时尊重订单......

names(data1)[ match( c("a", "c") , names(data1) ) ] <- c("hello", "world")
#  hello b world
#1     1 1     1
#2     2 2     2
#3     3 3     3

交换所需的重命名顺序......

names(data1)[ match( c("c", "a") , names(data1) ) ] <- c("hello", "world")
#  world b hello
#1     1 1     1
#2     2 2     2
#3     3 3     3

答案 3 :(得分:3)

您可以使用 plyr 包中的rename

data1<-data.frame("a"=1:3,"b"=1:3,"c"=1:3)
> rename(data1,c('a' = 'hello','b' = 'world'))
  hello world c
1     1     1 1
2     2     2 2
3     3     3 3