[R] Add column index number to str() output

David L Carlson dcarlson at tamu.edu
Fri Nov 23 22:49:47 CET 2012


You could create a simple function using this as a starting point:

str.ext <- function(x) {
     if(!is.data.frame(x)) stop("No data frame!")
     st <- gsub(" \\$", "", capture.output(str(x)))
     nm <- prettyNum(0:length(x), width=3)
     cat("\n", paste(nm, st, "\n", sep=" "))
}
str.ext(iris)

   0 'data.frame':      150 obs. of  5 variables: 
   1  Sepal.Length: num  5.1 4.9 4.7 4.6 5 5.4 4.6 5 4.4 4.9 ... 
   2  Sepal.Width : num  3.5 3 3.2 3.1 3.6 3.9 3.4 3.4 2.9 3.1 ... 
   3  Petal.Length: num  1.4 1.4 1.3 1.5 1.4 1.7 1.4 1.5 1.4 1.5 ... 
   4  Petal.Width : num  0.2 0.2 0.2 0.2 0.2 0.4 0.3 0.2 0.2 0.1 ... 
   5  Species     : Factor w/ 3 levels "setosa","versicolor",..: 1 1 1 1 1 1
1 1 1 1 ... 

----------------------------------------------
David L Carlson
Associate Professor of Anthropology
Texas A&M University
College Station, TX 77843-4352

> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-
> project.org] On Behalf Of David Winsemius
> Sent: Friday, November 23, 2012 3:03 PM
> To: Peter Ehlers
> Cc: seth.fore; r-help at r-project.org
> Subject: Re: [R] Add column index number to str() output
> 
> 
> On Nov 23, 2012, at 12:40 PM, Peter Ehlers wrote:
> 
> > On 2012-11-23 08:54, seth.fore wrote:
> >> I often find it would be very useful when inspecting a data
> >> structure using str() to know the column index number in order to
> >> rearrange the data in a manner amenable to my purpose. Is there a
> >> way to modify the display options of the str() function to add
> >> column index? I know this is really a trivial matter but it would
> >> increase the utility of the str() function for me and increase the
> >> speed with which I can manipulate the data structure. Thanks,
> >>
> >> Seth
> >
> > Presumably, you're talking about dataframes. I don't see this
> > as particularly useful unless you're in the habit of processing
> > your data by column _number_ rather than variable _name_.
> > If so, I would strongly discourage that habit.
> > And a cursory look at str.default() suggests that it may not be
> > all that trivial a code change.
> 
> I would offer the possibility of using names(dfrm) instead of
> str(dfrm) for this purpose. It would be reasonably easy to look at the
> output and figure out numbering. If you wanted every number in a
> single column. then use as.matrix(names(dfrm)).
> 
>  > names(apistrat)
>   [1] "cds"      "stype"    "name"     "sname"    "snum"     "dname"
>   [7] "dnum"     "cname"    "cnum"     "flag"     "pcttest"  "api00"
> [13] "api99"    "target"   "growth"   "sch.wide" "comp.imp" "both"
> [19] "awards"   "meals"    "ell"      "yr.rnd"   "mobility" "acs.k3"
> [25] "acs.46"   "acs.core" "pct.resp" "not.hsg"  "hsg"      "some.col"
> [31] "col.grad" "grad.sch" "avg.ed"   "full"     "emer"     "enroll"
> [37] "api.stu"  "pw"       "fpc"
>  > as.matrix(names(apistrat))
>        [,1]
>   [1,] "cds"
>   [2,] "stype"
>   [3,] "name"
>   [4,] "sname"
>   [5,] "snum"
>   [6,] "dname"
>   [7,] "dnum"
>   [8,] "cname"
>   [9,] "cnum"
> [10,] "flag"
> [11,] "pcttest"
> [12,] "api00"
> [13,] "api99"
> [14,] "target"
> [15,] "growth"
> [16,] "sch.wide"
> [17,] "comp.imp"
> [18,] "both"
> [19,] "awards"
> [20,] "meals"
> [21,] "ell"
> [22,] "yr.rnd"
> [23,] "mobility"
> [24,] "acs.k3"
> [25,] "acs.46"
> [26,] "acs.core"
> [27,] "pct.resp"
> [28,] "not.hsg"
> [29,] "hsg"
> [30,] "some.col"
> [31,] "col.grad"
> [32,] "grad.sch"
> [33,] "avg.ed"
> [34,] "full"
> [35,] "emer"
> [36,] "enroll"
> [37,] "api.stu"
> [38,] "pw"
> [39,] "fpc"
> 
> --
> David Winsemius, MD
> Alameda, CA, USA
> 
> ______________________________________________
> R-help at 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.




More information about the R-help mailing list