2015-12-02 42 views
1

在一个数据帧中的所有的列名有一种方法通过位置从所有列名删除字符串在数据帧除去前两个字符中的R

为例如,如果我有列名等:

ab_sales1 kj_sales2 lm_sales3 .....pk_sales100 
10   34   64  ..... 288 

我想我的输出列名是像

sales1 sales2 sales3 .....sales100 
    10  34 64  .... 288 

我知道字符串函数可以对行使用,但我找不到的东西列名

+0

尝试'colnames(df)< - sub(“^ [^ _] * _”,“”,colnames(df))' – nicola

+2

你看过'?substr'和'?colnames'吗? –

+0

我不知道可以在列名上使用子字符串! – user36176

回答

4

使用substring()

df <- data.frame(ab_sales1 = rnorm(6), 
       kj_sales2 = rnorm(6), 
       lm_sales3 = rnorm(6), 
       pk_sales100 = rnorm(6)) 
names(df) <- substring(names(df), 4) 

这给:

 sales1  sales2  sales3 sales100 
1 0.9486393 0.4727444 -1.5982694 0.01102933 
2 0.2980252 -0.7979390 -2.2574233 -0.37381571 
3 -0.5788511 -0.4873044 2.1668715 -0.26525840 
4 -1.0711035 1.0311850 0.3495215 -0.58936920 
5 0.2432300 1.7801097 -1.1982068 0.14810607 
6 1.6965152 0.9655296 -1.1000140 -1.02301506 
0

colnames

names(df) <- substring(names(df),1,5) 

这给指定我们想保持字符,例如保持字符1至5

 ab_sa  kj_sa  lm_sa  pk_sa 
1 0.4766499 -0.1179655 0.7169561 -0.49368959 
2 -1.5783553 -0.7481989 1.1739097 0.21988629 
3 -1.2270336 2.4848512 0.3982539 1.19795271 
4 -0.5443994 0.1170061 0.6622701 -0.48468645 
5 -0.5591005 1.9600350 0.3473387 0.78863634 
6 -0.9692961 -1.0195691 -0.5949841 -0.08180169