Thanks David. Besides rbind(), is there any other way to add a row to a
data frame so that I do not lose the custom attributes.

Thanks,
Sammy

On Sat, Nov 12, 2011 at 5:17 PM, David Winsemius <dwinsem...@comcast.net>wrote:

>
> On Nov 12, 2011, at 2:47 PM, Sammy Zee wrote:
>
>  When I use rbind() or rbind.data.frame() to add a row to an existing
>> dataframe, it appears that attributes for the column of type "factor" are
>> dropped. See the sample example below to reproduce the problem. Please
>> suggest How I can fix this.
>>
>>
>  Thanks,
>> Sammy
>>
>> a=c("Male", "Male", "Female", "Male")
>> b=c(1,2,3,4)
>> c=c("great", "bad", "good", "bad")
>> dataset<- data.frame (gender = a, count = b, answer = c)
>>
>>  dataset
>>>
>>
>> gender count answer
>> 1   Male     1  great
>> 2   Male     2    bad
>> 3 Female     3   good
>> 4   Male     4    bad
>>
>>
>>  attributes(dataset$answer)
>>>
>> $levels
>> [1] "bad"   "good"  "great"
>>
>> $class
>> [1] "factor"
>>
>> Now adding some custom attributes to column dataset$answer
>>
>> attributes(dataset$answer)<-c(**attributes(dataset$answer),**
>> list(newattr1="custom-attr1"))
>> attributes(dataset$answer)<-c(**attributes(dataset$answer),**
>> list(newattr2="custom-attr2"))
>>
>
> If you look through the code of rbind.data.frame you see that column
> values are processed with the 'factor' function.
>
>
> > attributes(dataset$answer)
> $levels
> [1] "bad"   "good"  "great"
>
> $class
> [1] "factor"
>
> $newattr1
> [1] "custom-attr1"
>
> $newattr2
> [1] "custom-attr2"
>
> > attributes(factor(dataset$**answer))
>
> $levels
> [1] "bad"   "good"  "great"
>
> $class
> [1] "factor"
>
>
> So I think you are out of luck. You will need to restore the "special
> attributes" yourself.
>
> --
> David.
>
>
>>  attributes(dataset$answer)
>>>
>> $levels
>> [1] "bad"   "good"  "great"
>>
>> $class
>> [1] "factor"
>>
>> $newattr1
>> [1] "custom-attr1"
>>
>> $newattr2
>> [1] "custom-attr2"
>>
>> However as soon as I add a row to this data frame ("dataset") by rbind(),
>> it loses the custom
>> attributes ("newattr1" and "newattr2") I have just added
>>
>> newrow = c(gender="Female", count = 5, answer = "great")
>>
>> dataset <- rbind(dataset, newrow)
>>
>>  attributes(dataset$answer)
>>>
>> $levels
>> [1] "bad"   "good"  "great"
>>
>> $class
>> [1] "factor"
>>
>> the two custom attributes are dropped!! Any suggestion why this is
>> happening.
>>
>> On Fri, Nov 11, 2011 at 11:44 AM, Jeff Newmiller
>> <jdnew...@dcn.davis.ca.us>**wrote:
>>
>>  As the doctor says, if it hurts "don't do that".
>>>
>>> A factor is a sequence of integers with a corresponding list of character
>>> strings. Factors in two separate vectors can and usually do map the same
>>> integer to different strings, and R cannot tell how you want that
>>> resolved.
>>>
>>> Convert these columns to character before combining them, and only
>>> convert
>>> to factor when you have all of your possibilities present (or you specify
>>> them in the creation of the factor vector).
>>> ------------------------------**------------------------------**
>>> ---------------
>>> Jeff Newmiller                        The     .....       .....  Go
>>> Live...
>>> DCN:<jdnew...@dcn.davis.ca.us>        Basics: ##.#.       ##.#.  Live
>>> Go...
>>>                                    Live:   OO#.. Dead: OO#..  Playing
>>> Research Engineer (Solar/Batteries            O.O#.       #.O#.  with
>>> /Software/Embedded Controllers)               .OO#.       .OO#.
>>>  rocks...1k
>>> ------------------------------**------------------------------**
>>> ---------------
>>> Sent from my phone. Please excuse my brevity.
>>>
>>> Sammy Zee <szee2...@gmail.com> wrote:
>>>
>>>  Hi all,
>>>>
>>>> When I use rbind() or rbind.data.frame() to add a row to an existing
>>>> dataframe, it appears that attributes for the column of type "factor"
>>>> are
>>>> dropped. I see the following post with same problem. However i did not
>>>> see
>>>> any reply to the following posting offering a solution. Could someone
>>>> please help.
>>>>
>>>>
>>>>  http://r.789695.n4.nabble.com/**rbind-data-frame-drops-**
>>> attributes-for-factor-**variables-td919575.html<http://r.789695.n4.nabble.com/rbind-data-frame-drops-attributes-for-factor-variables-td919575.html>
>>>
>>>>
>>>> Thanks,
>>>> Sammy
>>>>
>>>>     [[alternative HTML version deleted]]
>>>>
>>>> ______________________________**________________
>>>> R-help@r-project.org mailing list
>>>> https://stat.ethz.ch/mailman/**listinfo/r-help<https://stat.ethz.ch/mailman/listinfo/r-help>
>>>> PLEASE do read the posting guide
>>>> http://www.R-project.org/**posting-guide.html<http://www.R-project.org/posting-guide.html>
>>>> and provide commented, minimal, self-contained, reproducible code.
>>>>
>>>
>>>
>>>
>>        [[alternative HTML version deleted]]
>>
>> ______________________________**________________
>> R-help@r-project.org mailing list
>> https://stat.ethz.ch/mailman/**listinfo/r-help<https://stat.ethz.ch/mailman/listinfo/r-help>
>> PLEASE do read the posting guide http://www.R-project.org/**
>> posting-guide.html <http://www.R-project.org/posting-guide.html>
>> and provide commented, minimal, self-contained, reproducible code.
>>
>
> David Winsemius, MD
> West Hartford, CT
>
>

        [[alternative HTML version deleted]]

______________________________________________
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