更新列名,除非它存在于其他向量中

时间:2017-03-02 15:19:42

标签: r rename col

我想在数据框中的所有列名的末尾添加一些内容,除非列名存在于另一个给定的向量中。

例如说我有

df <- data.frame('my' = c(1,2,3),
                 'data' = c(4,5,6),
                 'is' = c(7,8,9),
                 'here' = c(10,11,12))
dont_update <- c('my', 'is')
to_add <- '_new'

我想结束

  my data_new is here_new
1  1        4  7       10
2  2        5  8       11
3  3        6  9       12

1 个答案:

答案 0 :(得分:2)

有点冗长,但这有效

to_update <- names(df)[!names(df) %in% dont_update]
names(df)[match(to_update, names(df))] <- paste0(to_update, to_add)

或者这可能更清楚

names(df) <- ifelse(names(df) %in% dont_update, names(df), paste0(names(df), to_add))