我试图获得连续每个可能三元组的外部值的平均值,总共有15个值。我试过这个并得到了错误。
for (i in 1:12){
if (!is.na(data[1,i] & data[1,i+1] & data[1,i+2])){
a[i] <- apply(data[1,i],data[1,i+2],1,mean,na.rm=T)
}
}
我到处寻找但找不到解决方案。我在这做错了什么?感谢您的帮助!
答案 0 :(得分:0)
这是一个在处理NA时执行您想要执行的操作的函数。它需要一行数据。
outer.triplet.mean = function(x){
a = integer(length(x)-2)
for (i in 1:length(x)-2){
a[i] = ifelse(!any(is.na(c(x[i], x[i+1], x[i+2]))), mean(c(x[i], x[i+2])), NA)}
return(a)
}
> outer.triplet.mean(1:10)
2 3 4 5 6 7 8 9
> outer.triplet.mean(c(1:5, NA, 5, NA, 10, NA, 1:5))
2 3 4 NA NA NA NA NA NA NA 2 3 4
如果你想在所有行上运行它。
sapply(data, outer.triplet.mean)
答案 1 :(得分:-1)
也许你也可以尝试:
outer.triplet.mean1 <- function(x,...) {
indx <- 1:3+ rep(0:(length(x)-3),each=3)
m1 <- matrix(x[indx], ncol=3, byrow=T)
rowMeans(m1,...)
}
outer.triplet.mean1(1:10)
#[1] 2 3 4 5 6 7 8 9
outer.triplet.mean1(c(1:5,NA, 5, NA, 10, NA, 1:5))
# [1] 2 3 4 NA NA NA NA NA NA NA 2 3 4
outer.triplet.mean1(c(1:5,NA, 5, NA, 10, NA, 1:5),na.rm=T)
# [1] 2.0 3.0 4.0 4.5 5.0 5.0 7.5 10.0 5.5 1.5 2.0 3.0 4.0
使用&gt; 1行
apply(rbind(1:10,1:10),1, outer.triplet.mean1)