R:为ddplyr选择每两个连续的行
R: Selecting every two consecutive rows for ddplyr
这是我的数据
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
我的最终目标是对每两个连续行应用线性回归,return 使用 Dilution 和 meanresp 的回归斜率。
table 的长度可能会有所不同,我不想使用 for 循环,因为我正试图改掉这个习惯。
我认为 ddply 会很好,但我不确定如何 select 每两个连续行的子集。我想也许有一种方法可以说“对长度为 2 的 Dilution 的每个向量子集执行此操作?
任何见解都会有所帮助。
我不知道这对线性回归有何帮助,但您可以这样做:
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
如果您还需要特定的列以及连续的行,您可以 select 它们为:
> 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
这是我的数据
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
我的最终目标是对每两个连续行应用线性回归,return 使用 Dilution 和 meanresp 的回归斜率。
table 的长度可能会有所不同,我不想使用 for 循环,因为我正试图改掉这个习惯。
我认为 ddply 会很好,但我不确定如何 select 每两个连续行的子集。我想也许有一种方法可以说“对长度为 2 的 Dilution 的每个向量子集执行此操作?
任何见解都会有所帮助。
我不知道这对线性回归有何帮助,但您可以这样做:
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
如果您还需要特定的列以及连续的行,您可以 select 它们为:
> 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