[R] editing a data.frame

john.polo jpolo at mail.usf.edu
Mon Jun 9 13:41:55 CEST 2008


that did the trick. thanks a lot!

john

jim holtman wrote:
> Actually change the TreeTag to characters first because you are trying 
> to store in a new factor value that is not there
>  
> yr1bp$TreeTag <- as.character(yr1bp$TreeTag)
> yr1bp$TreeTag[1501]<-sub("1.00", "1", yr1bp$TreeTag[1501])
> # change back to a factor if desired
> yr1bp$TreeTag <- factor(yr1bp$TreeTag)
>
>
> On Sat, Jun 7, 2008 at 8:22 AM, jim holtman <jholtman at gmail.com 
> <mailto:jholtman at gmail.com>> wrote:
>
>     try:
>      
>     yr1bp$TreeTag[1501]<-sub("1.00", "1",
>     as.character(yr1bp$TreeTag[1501]))
>      
>     Since it appears that TreeTag is a factor.  This can be verified
>     with 'str'.
>
>
>     On Fri, Jun 6, 2008 at 11:22 PM, john.polo <jpolo at mail.usf.edu
>     <mailto:jpolo at mail.usf.edu>> wrote:
>
>         Daniel Folkinshteyn wrote:
>
>             works for me:
>             > sub('1.00', '1', '1.00E-20')
>             [1] "1E-20"
>
>         when i input what you wrote, i get the same result. but that
>         doesn't change the value for TreeTag at row 1501, it's just
>         floating around in space. if i try it for yr1bp$TreeTag[1501],
>         which is 1.00E-20 i get this:
>
>
>         > yr1bp$TreeTag[1501]<-sub("1.00", "1", yr1bp$TreeTag[1501])
>         Warning message:
>         In `[<-.factor`(`*tmp*`, 1501, value = "1E-20") :
>          invalid factor level, NAs generated
>
>         and then 1501 turns into:
>         1501    <NA>   2001 adult 32.5
>
>         which is less useful than the way it was originally input.
>         thanks for the suggestion.
>
>         john
>
>
>             finally, if all your target strings are of the form
>             1.00E-20, you could sub the whole thing with a more
>             general regexp:
>
>             sub("([0-9])(\.[0-9]{2})(.*)", "\\1\\3", yourvector)
>             (it matches a digit, followed by a dot and two digits,
>             followed by "anything else", and takes out the "dot and
>             two digits" bit in the replacement, in the whole vector.)
>
>         thanks for that suggestion. it could come in handy.
>
>
>
>             on 06/06/2008 03:25 PM john.polo said the following:
>
>                 dear R users,
>
>                 the data frame (read in from a csv) looks like this:
>                       TreeTag     Census    Stage     DBH
>                 1     CW-W740   2001 juvenile     5.8
>                 2     CW-W739   2001 juvenile     4.3
>                 3     CW-W738   2001 juvenile     4.7
>                 4     CW-W737   2001 juvenile     5.4
>                 5     CW-W736   2001 juvenile     7.4
>                 6     CW-W735   2001 juvenile     5.4
>                 ...
>                 1501 1.00E-20   2001  adult      32.5
>
>                 i would like to change values under the TreeTag
>                 column. as the last value shows, some of the tags have
>                 decimals followed by 2 decimal places. i just want
>                 whole numbers, i.e. not 1.00E-20, but 1E-20. i have a
>                 rough understanding of regexp and grepped all the
>                 positions that have the inappropriate tags. i tried
>                 sub() a couple of different ways, like
>                 yr1bp$TreeTag[1501]<-sub("1.00", "1", yr1bp$TreeTag[1501])
>                 and after turning yr1bp$TreeTag[1501] into <NA>,
>                 yr1bp$TreeTag[1501]<-sub("", "1E-20", yr1pb$TreeTag[1501])
>                 and
>                 sub("", "1E-20", yr1bp$TreeTag[1501])
>                 but it's not working. i guess it has something to do
>                 with the data.frame characteristics i'm not aware of
>                 or don't understand. would i somehow have to tear
>                 apart the columns, edit them, and then put it back
>                 together? not that i know how to do that, but i'm
>                 wondering out loud.
>
>                 john
>



More information about the R-help mailing list