[R] Indexing by logical vectors
David Winsemius
dwinsemius at comcast.net
Tue Jul 20 01:46:33 CEST 2010
On Jul 19, 2010, at 7:16 PM, Christian Raschke wrote:
> Dear R-Listers,
>
> My question concerns indexing vectors by logical vectors that are
> based on the original vector. Consider the following simple example
> to hopefully make clear what I mean:
>
> a <- rnorm(10)
> a[a<0] <- NA
>
> However, I am now working with multiple data frames that I received,
> where each of them has nicely descriptive, yet long names(). In my
> scripts there are many instances where operations similar to the one
> above are required. Again a simple example:
>
>
> some.data.frame <- data.frame(some.long.variable.name=rnorm(10),
> some.other.long.variable.name=rnorm(10))
>
> some.data.frame$some.other.long.variable.name[some.data.frame
> $some.other.long.variable.name < 0] <- NA
>
>
> The fact that the names are so long makes things not very readable
> in the script and hard to debug. Is there a way in R to refer to the
> "self" of whatever is being indexed? I am looking for something like
>
> some.data.frame$some.other.long.variable.name[.self < 0] <- NA
There is an alternative, "is.na()<-" which I think is a bit more
readable:
is.na($some.other.long.variable.name) <- some.data.frame
$some.other.long.variable.name < 0
But do _not_ do:
with(some.data.frame, is.na(some.other.long.variable.name) <-
some.other.long.variable.name < 0 )
--
David.
>
> that would accomplish the same result as above. Or is there another
> concise, but less messy way to do this? I prefer not attaching the
> data.frames and partial matching makes things even more messy since
> many names() are very similar. I know I could just rename
> everything, but I'd like to learn if there is and easy or obvious
> way to do this in R that I have missed so far.
>
> I would appreciate any advice, and I apologize if this topic has
> been discussed before.
>
>
> > sessionInfo()
> R version 2.11.0 (2010-04-22)
> x86_64-redhat-linux-gnu
>
> locale:
> [1] LC_CTYPE=en_US.UTF-8 LC_NUMERIC=C
> [3] LC_TIME=en_US.UTF-8 LC_COLLATE=en_US.UTF-8
> [5] LC_MONETARY=C LC_MESSAGES=en_US.UTF-8
> [7] LC_PAPER=en_US.UTF-8 LC_NAME=C
> [9] LC_ADDRESS=C LC_TELEPHONE=C
> [11] LC_MEASUREMENT=en_US.UTF-8 LC_IDENTIFICATION=C
>
> attached base packages:
> [1] stats graphics grDevices utils datasets methods base
>
>
> --
> Christian Raschke
> Department of Economics
> and
> ISDS Research Lab (HSRG)
> Louisiana State University
> crasch2 at lsu.edu
>
> ______________________________________________
> 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.
David Winsemius, MD
West Hartford, CT
More information about the R-help
mailing list