我想用x回归y1,然后用x回归y2,然后将斜率,截距,r2值,p值等保存到向量中,使得最终向量应包含y1...n
的值甚至如果值是NA。
以下是我的数据的外观
y1 y2 y3 y4 y5 x
NA 89 86 91 69 1
NA 86 NA 88 NA 2
NA 86 83 88 66 3
NA 100 NA 102 80 4
使用以下代码,不会计算y [,i]的所有值都是NA的那些列的斜率值,但如果其中一个值是NA,则仍将计算斜率值。
slope<-0
for(i in 1:length(names(y))){
if (all(is.na(y[,i]))==FALSE) {
m <- lm(y[,i] ~ time)
slope <- c(slope, m$coefficients[2])
}
}
然而,我仍然无法找到一种方法来维持所有y [,i]的位置信息,使得我的最终矢量输出看起来像这样
slope
1 NA
2 9.362637e-01
3 8.461538e-01
4 3.450549e-01
5 6.593407e-01
非常感谢任何帮助
答案 0 :(得分:1)
sapply
)中存在任何非NA并且返回NAs,则DF
的非x列上的y
会返回系数:
t(sapply(DF[-6], function(y) if (any(!is.na(y))) coef(lm(y ~ x, DF)) else c(NA, NA)))
这给出了以下内容,其中第1列是截距,第2列是斜率:
[,1] [,2]
y1 NA NA
y2 82.00000 3.300000
y3 87.50000 -1.500000
y4 84.00000 3.300000
y5 63.85714 2.928571
如果只需要斜坡,那么:
matrix(sapply(DF[-6], function(y) if (any(!is.na(y))) coef(lm(y ~ x, DF))[2] else NA))
答案 1 :(得分:0)
#This is for the slope only.
nn<-lapply(paste0("y",1:5),function(i){
if (all(is.na(y[[i]]))==FALSE) {bb<-lm(y[[i]]~x,data=y)
return(bb[[1]][2])
}else{
return(NA)
}
})
do.call(rbind,kk)
x
[1,] NA
[2,] 3.300000
[3,] -1.500000
[4,] 3.300000
[5,] 2.928571
do.call(rbind,nn)