Bacou, Melanie
2011-Apr-17 20:21 UTC
[R] How to retrieve a vector of a data.frame's variable attributes?
Hi, I have a data.frame with 100 variables and I have assigned a "label", "units" and "category" attribute to each variable. I would like to reorder the variables in the data.frame by the "category" attributes but can't find a way. For example, the first variable is:> attributes(hh$aez)$levels [1] "coastal" "forest" "savannah" $class [1] "labelled" "factor" $label [1] ecological zone 93 Levels: 10 quantiles of welfare ... year of the interview $units [1] class 24 Levels: '05 PPP USD / year cedis / year cedis /year class geo-1 ... years $category [1] geography 7 Levels: agriculture demography design expenditure geography ... welfare I have tried: hh <- hh[, order(attr(hh, "category"))] hh <- hh[, order(attr(hh[, 1:100], "category"))] hh <- hh[, order(attr(dimnames(hh), "category"))] but all the right-hand side assignments above return NULL. Thanks very much for your help with this simple task! --Mel. _______________________ Melanie Bacou 3110 Wisconsin Ave, NW Washington DC, 20016 +1 (202) 492-7978 mel at mbacou.com
David Winsemius
2011-Apr-17 21:59 UTC
[R] How to retrieve a vector of a data.frame's variable attributes?
On Apr 17, 2011, at 4:21 PM, Bacou, Melanie wrote:> Hi, > > I have a data.frame with 100 variables and I have assigned a "label", > "units" and "category" attribute to each variable. I would like to > reorder > the variables in the data.frame by the "category" attributes but > can't find > a way. >Something like lapply(hh, attr, which="category") might return something potentially useful. You obviously have a test case, but have failed to offer it up. Possibly using order() around that might get all the like category variables together.> For example, the first variable is: > >> attributes(hh$aez) > $levels > [1] "coastal" "forest" "savannah" > > $class > [1] "labelled" "factor" > > $label > [1] ecological zone > 93 Levels: 10 quantiles of welfare ... year of the interview > > $units > [1] class > 24 Levels: '05 PPP USD / year cedis / year cedis /year class > geo-1 ... years > > $category > [1] geography > 7 Levels: agriculture demography design expenditure geography ... > welfare > > I have tried: > > hh <- hh[, order(attr(hh, "category")) ]Did you look at what order(attr(hh, "category")) returns. Since you assigned the attribute to individual columns (which are arranged as a list, you cannot expect the whole object to return anything useable when queried with attr().> hh <- hh[, order(attr(hh[, 1:100], "category"))](It would be the same since hh == hh[,1:100] )> hh <- hh[, order(attr(dimnames(hh), "category"))]dimnames would _not_ have any attributes. And attr can only work on one object at a a time anyway,> > but all the right-hand side assignments above return NULL. > > Thanks very much for your help with this simple task! > > --Mel. > > > > _______________________ > Melanie BacouDavid Winsemius, MD West Hartford, CT