FilipeTeixeira
FilipeTeixeira

Reputation: 1160

Rename several columns (variable number)

I have a dataset where the last columns indicate the number of stops extracted from that dataset.

ColA  ColB  ColC  1  2  3  4  5  6  7  8  9  10  (...)
 a     g     c    a  q  e  r  e  r  q  g  h  q   (...)

What I want is to select from column 1, until the last column, and add Stop before it, ending up with Stop1, Stop2, etc... The problem is that those columns can vary. Sometimes I have 10 after 1 other times I have 6.

I've tried with dplyr and data.table but I'm not sure how to automate this.

EDIT: ColA to ColC are fixed and always the same.

Upvotes: 0

Views: 80

Answers (1)

Marco Sandri
Marco Sandri

Reputation: 24252

If I correctly understood your problem, this is a sufficiently flexible code that should solve your problem. Start considering the following dataset:

set.seed(1)
df <- data.frame(matrix(rpois(130, 20),ncol=13))
names(df) <- c(paste("Col",LETTERS[1:3],sep=""),as.character(1:10))
df

#######
   ColA ColB ColC  1  2  3  4  5  6  7  8  9 10
1    17   21   20 13 13 15 29 25 16 15 12 23 17
2    25   17   11 24 23 14 22 23 25 14 18 19 15
3    25   18   22 18 19 30 16 19 23 27 18 19 11
4    21   18   24 25 23 19 19 18 27 23 18 16 18
5    13   21   16 18 21 23 22 18 22 24 22 26 15
6    22   16   17 27 17 20 24 24 14 21 19 17 15
7    23   23   18 22 16 16 20 18 21 27 17 22 14
8    22   22   17 17 26 13 19 25 24 17 15 13 20
9    18   24   21 22 28 26 15 22 23 20 19 15 27
10   26   23   19 16 18 20 17 25 16 20 19 18 19

Now rename columuns as required:

k <- which(names(df)=="1")
names(df)[k:ncol(df)] <- paste("Stop",1:(ncol(df)-k+1),sep="")
df

#############
   ColA ColB ColC Stop1 Stop2 Stop3 Stop4 Stop5 Stop6 Stop7 Stop8 Stop9 Stop10
1    17   21   20    13    13    15    29    25    16    15    12    23     17
2    25   17   11    24    23    14    22    23    25    14    18    19     15
3    25   18   22    18    19    30    16    19    23    27    18    19     11
4    21   18   24    25    23    19    19    18    27    23    18    16     18
5    13   21   16    18    21    23    22    18    22    24    22    26     15
6    22   16   17    27    17    20    24    24    14    21    19    17     15
7    23   23   18    22    16    16    20    18    21    27    17    22     14
8    22   22   17    17    26    13    19    25    24    17    15    13     20
9    18   24   21    22    28    26    15    22    23    20    19    15     27
10   26   23   19    16    18    20    17    25    16    20    19    18     19

I hope it can help you.

Upvotes: 1

Related Questions