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