[R] Looping through data sets to change column from character to numeric
Rolf Turner
rolf.turner at xtra.co.nz
Fri Jul 29 07:34:41 CEST 2011
On 29/07/11 11:09, Sarah Henderson wrote:
> Greetings to all --
>
> I am having a silly problem that I just can't solve. Someone has given me
> an .RData file will hundreds of data frames. Each data frame has a column
> named ResultValue, currently character when it should be numeric. I want to
> loop through all of the data frames to change the variable to numeric, but I
> cannot figure out how to do it. My best guess was along the lines of:
>
> frames = ls()
> for (frame in frames){
> assign(frame, get(frame), .GlobalEnv)
> frame[,"ResultValue"] = as.numeric(frame[,"ResultValue"])
> }
>
Note that ``frame'' is an object the value of which is a character string
naming (successive) data frames. Your call to assign doesn't change the
value of ``frame''. It *could* (but doesn't actually) change the value
of the
object *named* by the character string stored in ``frame''.
Suppose that you have data frames clyde, melvin, and irving. On your
first pass
through the loop the value of frame is the character string ``clyde''.
Your assign() call in effect does ``clyde <- clyde'' which doesn't
accomplish
much. :-)
The value of frame after the assign() is still the character string
``clyde''.
I.e. frame is a character scalar, so frame[,"ResultValue"] doesn't make any
sense.
What you need to do is something like:
frames <- ls()
for(frame in frames) {
assign("temp",get(frame)) # Don't think you need the
``.GlobalEnv'', although it doesn't hurt.
temp[,ResultValue"] <- as.numeric(temp[,"ResultValue"])
assign(frame,temp)
}
This is untested ....
But I hope it helps.
cheers,
Rolf Turner
More information about the R-help
mailing list