2015-10-15 68 views
0

我有一个数据框包含这些变量名称:"X_1","X_106","X_110","X_111","X_112"以及其他以字母表中其他字母开头的名称。我有兴趣将"_v1"仅附加到以"X"开头的变量,如上所示。我如何在R中完成这项工作?将字母添加到变量名的末尾

回答

2
names(df2) <- ifelse(grepl("^X",names(df2)), paste0(names(df2),"_v1"), names(df2)) 
+1

或'g < - grepl(“^ X”,names(df2));名称(df2)[g] < - paste0(名称(df2)[g],“_ v1”)'放弃'ifelse()'呼叫 –

+1

叹息...再次用快速枪击... – brittenb

+0

@RichardScriven嘿,为什么不'library(data.table); setDT(list(names(dat)))[grep(“^ X”,V1),V1:= paste0(V1,“_ v1”)]'? – Frank

5

或者只是:

colnames(dat) <- sub("(^X.*)", "\\1_v1", colnames(dat)) 

例如:

dat <- data.frame(a=1, b=2, c=3, 
        X_1=4, X_106=5, X_110=6, X_111=7, X_112=8) 

dplyr::glimpse(dat) 
## Observations: 1 
## Variables: 8 
## $ a  (dbl) 1 
## $ b  (dbl) 2 
## $ c  (dbl) 3 
## $ X_1 (dbl) 4 
## $ X_106 (dbl) 5 
## $ X_110 (dbl) 6 
## $ X_111 (dbl) 7 
## $ X_112 (dbl) 8 

colnames(dat) <- sub("(^X.*)", "\\1_v1", colnames(dat)) 

dplyr::glimpse(dat) 
## Observations: 1 
## Variables: 8 
## $ a  (dbl) 1 
## $ b  (dbl) 2 
## $ c  (dbl) 3 
## $ X_1_v1 (dbl) 4 
## $ X_106_v1 (dbl) 5 
## $ X_110_v1 (dbl) 6 
## $ X_111_v1 (dbl) 7 
## $ X_112_v1 (dbl) 8 
+0

你可以只做'str(dat)'而不是加载一个包并打字太多,只是说。很好的解决方案 –

+0

我真的更喜欢'str'上的'glimpse'输出' – hrbrmstr

+0

'它们只有'num'和'(dbl)'有区别,还是我错过了某些东西? –

1

我相信,因为这将是简单的:

library(stringr) 
names(my_data) <- ifelse(str_detect(names(my_data), "^X_"), paste(names(my_data), "v1", sep = "_"), names(my_data)) 

str_detect(names(my_data), "^X_")是什么样子的名字是从X_开始。