[R] Selections in lists
David Winsemius
dwinsemius at comcast.net
Thu Aug 25 21:09:24 CEST 2011
On Aug 25, 2011, at 11:24 AM, mdvaan wrote:
> Hi,
>
> I have produced a list g and I would like to reduce the amount of
> information contained in each object in g.
> For each matrix I would like to keep the values where the column
> name equals
> g[year][[1]][[x]] and the row names equals g[year][[1]][[-x]]. So in
> g$`1999`$`8029`, year = 1999 and x = 8029. I have been experimenting
> with
> the subset function, but have been unsuccesful. Thanks for your help!
>
I suspect this is because you g object does not have the structure
that you imagine for it:
> str(g)
List of 3
$ 1997: num [1:4, 1:4] 3 2 1 1 2 3 0 1 1 0 ...
..- attr(*, "dimnames")=List of 2
.. ..$ B: chr [1:4] "8025" "8026" "8027" "8029"
.. ..$ B: chr [1:4] "8025" "8026" "8027" "8029"
$ 1998: num [1:4, 1:4] 2 1 1 0 1 3 1 1 1 1 ...
..- attr(*, "dimnames")=List of 2
.. ..$ B: chr [1:4] "8025" "8026" "8027" "8029"
.. ..$ B: chr [1:4] "8025" "8026" "8027" "8029"
$ 1999: num [1:5, 1:5] 2 1 1 0 0 1 3 2 0 1 ...
..- attr(*, "dimnames")=List of 2
.. ..$ B: chr [1:5] "8025" "8026" "8027" "8028" ...
.. ..$ B: chr [1:5] "8025" "8026" "8027" "8028" ...
The things you think are list indices are really in the 'dimnames'
attributes of the objects.
--
David
> The result for g$`1999`$`8029` should be:
>
> $`1999`$`8029`
> B
> B 8029
> 8026 1
> 8027 1
> 8028 1
>
> The result for g$`1999`$`8028` should be:
>
> $`1999`$`8028`
> B
> B 8028
> 8029 1
>
>
> The result for g$`1999`$`8027` should be:
>
> $`1999`$`8027`
> B
> B 8027
> 8025 1
> 8026 2
> 8029 1
>
>
> Example:
>
> DF = data.frame(read.table(textConnection(" A B C
> 80 8025 1995
> 80 8026 1995
> 80 8029 1995
> 81 8026 1996
> 82 8025 1997
> 82 8026 1997
> 83 8025 1997
> 83 8027 1997
> 90 8026 1998
> 90 8027 1998
> 90 8029 1998
> 84 8026 1999
> 84 8027 1999
> 85 8028 1999
> 85 8029 1999"),head=TRUE,stringsAsFactors=FALSE))
>
> e <- function(y) crossprod(table(DF[DF$C %in% y, 1:2]))
> years <- sort(unique(DF$C))
> f <- as.data.frame(embed(years, 3))
> g<-lapply(split(f, f[, 1]), e)
> years<-names(g)
> for (t in seq(years))
> {
> year=as.character(years[t])
> g[[year]]<-sapply(colnames(g[[year]]), function(var)
> g[[year]][g[[year]][,var]>0, g[[year]][var,]>0])
> }
>
> --
> View this message in context: http://r.789695.n4.nabble.com/Selections-in-lists-tp3768562p3768562.html
> Sent from the R help mailing list archive at Nabble.com.
>
> ______________________________________________
> 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