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 <[EMAIL PROTECTED] <mailto:[EMAIL PROTECTED]>> 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 <[EMAIL PROTECTED]
    <mailto:[EMAIL PROTECTED]>> 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


______________________________________________
R-help@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-help
PLEASE do read the posting guide http://www.R-project.org/posting-guide.html
and provide commented, minimal, self-contained, reproducible code.

Reply via email to