Skip to content
Prev 269291 / 398503 Next

Selecting cases from matrices stored in lists

Jean V Adams wrote:
Sorry, I am using the devel version of zoo which allows you to use the
"partial" argument. The correct code is given below. 

I didn't get your suggestion to work. If I understand what you are trying to
do (multiplying c and h), this is likely to give the wrong results because h
contains values of 0. Since I am ultimately interested in the values of the
split matrices in c (based on the original matrices in c), this will
probable not work. Or am I just not understanding you? 

Thanks!  

# devel version of zoo
install.packages("zoo", repos = "http://r-forge.r-project.org")
library(zoo)
DF1 = data.frame(read.table(textConnection("    B  C  D  E  F  G 
8025  1995  0  4  1  2 
8025  1997  1  1  3  4 
8026  1995  0  7  0  0 
8026  1996  1  2  3  0 
8026  1997  1  2  3  1 
8026  1998  6  0  0  4 
8026  1999  3  7  0  3 
8027  1997  1  2  3  9 
8027  1998  1  2  3  1 
8027  1999  6  0  0  2 
8028  1999  3  7  0  0 
8029  1995  0  2  3  3 
8029  1998  1  2  3  2 
8029  1999  6  0  0  1"),head=TRUE,stringsAsFactors=FALSE)) 
  
a <- read.zoo(DF1, split = 1, index = 2, FUN = identity) 
sum.na <- function(x) if (any(!is.na(x))) sum(x, na.rm = TRUE) else NA 
b <- rollapply(a, 3,  sum.na, align = "right", partial = TRUE) 
newDF <- lapply(1:nrow(b), function(i) 
              prop.table(na.omit(matrix(b[i,], nc = 4, byrow = TRUE, 
                dimnames = list(unique(DF1$B), names(DF1)[-1:-2]))), 1)) 
names(newDF) <- time(a) 
c<-lapply(newDF, function(mat) tcrossprod(mat / sqrt(rowSums(mat^2)))) 

DF2 = 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(DF2[DF2$C %in% y, 1:2])) 
years <- sort(unique(DF2$C)) 
f <- as.data.frame(embed(years, 3)) 
g<-lapply(split(f, f[, 1]), e) 
h<-lapply(g, function (x) ifelse(x>0,1,0))

years<-c(1997:1999) 
for (t in 1:length(years)) 
        { 
        year=as.character(years[t]) 
        h[[year]]<-sapply(colnames(h[[year]]), function(var)
h[[year]][h[[year]][,var]>0, h[[year]][var,]>0]) 
        } 




--
View this message in context: http://r.789695.n4.nabble.com/Selecting-cases-from-matrices-stored-in-lists-tp3759597p3760177.html
Sent from the R help mailing list archive at Nabble.com.