alexhli
alexhli

Reputation: 409

Loop to rename fields in an R dataframe

I have a data frame in R that I have read in from a csv file. How can I append a string ("EA") to the end of all column names? I have figured out code that works for a single column, but for some reason my loop does not return renamed fields.

Here is the dataframe:

> str(mydataframe)
'data.frame':   8368 obs. of  4 variables:
 $ gene: Factor w/ 8368 levels "A1BG","A1CF",..: 6949 4379 7111 4691 2331 4914 506 4985 7109 2072 ...
 $ p   : num  1.23e-09 1.05e-07 1.20e-07 2.53e-07 6.67e-07 ...
 $ beta: num  2.86 2.52 2.51 1.72 2.34 ...
 $ se  : num  0.471 0.474 0.474 0.334 0.471 ...

Here is the code:

for(i in names(mydataframe)){ 
    i_renamed <- paste(i, "EA", sep=".")
    mydataframe$i_renamed <- mydataframe$i
    mydataframe$i <- NULL
}

...but afterwards the object is still the same

> str(mydataframe)
'data.frame':   8368 obs. of  4 variables:
 $ gene: Factor w/ 8368 levels "A1BG","A1CF",..: 6949 4379 7111 4691 2331 4914 506 4985 7109 2072 ...
 $ p   : num  1.23e-09 1.05e-07 1.20e-07 2.53e-07 6.67e-07 ...
 $ beta: num  2.86 2.52 2.51 1.72 2.34 ...
 $ se  : num  0.471 0.474 0.474 0.334 0.471 ...

The desired result is a field "gene.EA" that is identical to the original "gene" field, etc for all columns

Thank you

Upvotes: 2

Views: 2638

Answers (1)

hwnd
hwnd

Reputation: 70732

You can avoid trying to use a loop to do this.

names(mydataframe) <- paste0(names(mydataframe), '.EA')

Or explicitly, you could do:

mydataframe <- setNames(mydataframe, paste0(names(mydataframe), '.EA'))

Upvotes: 4

Related Questions