[R] a faster and shorter way to perform calculations?
dxc13
dxc13 at health.state.ny.us
Wed Aug 29 15:58:26 CEST 2007
This is a continuation from a previous posting of mine:
The following algorithm below is what I want to accomplish:
Z(xk) = Average(Yi, i belongs to Ik), where Ik contains all i such that for
each j, |Xi,j - xkj│≤ 2. Here, j = 1, 2 and i corresponds to the elements
in each X and/or xk
>data
x1 x2 y
1 1 2
2 2 6
3 3 12
Now, consider a second data frame or matrix (xk):
xk1 xk2
0.5 0.5
1.0 0.5
1.5 0.5
2.0 0.5
0.5 1
1.0 1
1.5 1
2.0 1
0.5 1.5
1.0 1.5
1.5 1.5
2.0 1.5
0.5 2
1.0 2
1.5 2
2.0 2
In the end, there should be matrix or data frame with 3 columns, xk1, xk2,
and z (the result of the algorithm). Having any NA's as an answer is just
fine. Here is my code to get this to get this to work, it is lengthy and I
am looking for a way to cut it down and get the same results.
w1 <- outer(xk$xk1, data[,x1], function(y,z) abs(z-y))
w2 <- outer(xk$xk2, data[,x2], function(y,z) abs(z-y))
w1[w1 > d1] <- NA
w2[w2 > d2] <- NA
i1 <- ifelse(!is.na(w1),col(w1),NA)
i2 <- ifelse(!is.na(w2),col(w2),NA)
#NOW COMPARE i1 AND i2 BY ROWS...IF THEY HAVE A VALID NUMBER IN
#THE SAME POSITION (RxC) THEN EXTRACT THE Z-VALUE CORRESPONDING
#TO THE COLUMN NUMBER
all <- cbind(i1,i2)
Ik <- lapply(as.data.frame(t(all)), function(x)
data$y[unique(x[duplicated(x)])])
zk <- unlist(lapply(Ik, mean, na.rm = TRUE))
z <- cbind(zk)
#FINAL DATA FRAME WILL CONSIST OF xk (XK1 and XK2), ZK
xk$z <- z
df <- as.data.frame(sapply(xk,rbind))
I hope my question makes sense and someone can help find a way to reduce the
amount of code here.
I have attached a text file with better numbers to try this with.
Thank you,
dxc13 http://www.nabble.com/file/p12387673/test.txt test.txt
--
View this message in context: http://www.nabble.com/a-faster-and-shorter-way-to-perform-calculations--tf4347973.html#a12387673
Sent from the R help mailing list archive at Nabble.com.
More information about the R-help
mailing list