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! 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.
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
Hi mdvaan, Not the best solution, but it should get you started: lapply(g, function(l){ n <- names(l) res <- lapply(1:length(n), function(ii){ rr <- l[[n[ii]]] rn <- rownames(rr) cn <- colnames(rr) i <- rn %in% n[[ii]] rr <- rr[!i, i] rr2 <- matrix(rr, ncol = 1) rownames(rr2) <- rn[!i] colnames(rr2) <- cn[i] rr2 }) res }) HTH, Jorge * * * * On Thu, 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! > > 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@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. >[[alternative HTML version deleted]]