这是我的数据
Assay Sample Dilution meanresp number
1 S 0.25 68.55 1
1 S 0.50 54.35 2
1 S 1.00 44.75 3
我的最终目标是对每两个连续行应用线性回归,并使用Dilution和meanresp返回该回归的斜率。
桌子的长度可能会有所不同,我宁愿不使用for循环,因为我试图摆脱这种习惯。
我认为ddply会很好,但我不确定如何选择每两个连续行的子集。我想也许有一种方法可以说'为长度为2的稀释的每个向量子集做这个吗?
任何见解都会有所帮助。
答案 0 :(得分:3)
我不知道这对线性回归有什么帮助,但你可以这样做:
df <- read.table(header=T, text="Assay Sample Dilution meanresp number
1 S 0.25 68.55 1
1 S 0.50 54.35 2
1 S 1.00 44.75 3")
使用lapply
:
> lapply(2:nrow(df), function(x) df[(x-1):x,] )
[[1]]
Assay Sample Dilution meanresp number
1 1 S 0.25 68.55 1
2 1 S 0.50 54.35 2
[[2]]
Assay Sample Dilution meanresp number
2 1 S 0.5 54.35 2
3 1 S 1.0 44.75 3
如果您想要连续行的特定列,可以选择它们:
> lapply(2:nrow(df), function(x) df[(x-1):x, c('Dilution','meanresp')] )
[[1]]
Dilution meanresp
1 0.25 68.55
2 0.50 54.35
[[2]]
Dilution meanresp
2 0.5 54.35
3 1.0 44.75
修改强>
如果您想执行线性回归,则另一个lapply
足以执行此操作:
a <- lapply(2:nrow(df), function(x) df[(x-1):x, c('Dilution','meanresp')] )
b <- lapply(a,function(x) lm(Dilution~meanresp,data=x))
>b
[[1]]
Call:
lm(formula = Dilution ~ meanresp, data = x)
Coefficients:
(Intercept) meanresp
1.45687 -0.01761
[[2]]
Call:
lm(formula = Dilution ~ meanresp, data = x)
Coefficients:
(Intercept) meanresp
3.33073 -0.05208
或者如果你只想要斜率:
b <- lapply(a, function(x) {
d <- lm(Dilution~meanresp,data=x)
coefficients(summary(d))[2,1]
})
> b
[[1]]
[1] -0.01760563
[[2]]
[1] -0.05208333