数据框中的逐行操作,其中每一行都取决于 R 中的前一行

Row-wise operations in a dataframe where each row depends on previous row in R

我想找到数据框中某一列和某行的某些值与同一列和前一行的值的组合。这是一个可重现的例子。

我有四种可能的条件,我想识别成对的(两)连续行。

library(tidyverse)
library(purrr)

df <- data.frame(
    condition = sample(
        x = c("IL", "IR", "EL", "ER"), size = 10, replace = TRUE
        )
    )

df

   condition
1         IR
2         EL
3         IR
4         EL
5         ER
6         IL
7         IR
8         EL
9         EL
10        EL

换句话说,我想得到一个“对”列,例如:

   condition     pair
1         IR    NA
2         EL    IR-EL
3         IR    EL-IR
4         EL    IR-EL
5         ER    EL-ER
6         IL    ER-IL
7         IR    IL-IR
8         EL    IR-EL
9         EL    EL-EL
10        EL    EL-EL

我尝试将 purrr::accumulate() 与 paste() 结合使用,但它会累积所有以前的值。我怎样才能只保留以前和当前的值(即滞后 1)?

df %>%
    mutate(
        pair = accumulate(
            .x = condition,
            .f = ~paste(.x, .y, sep = "-")
            )
        )

   condition                          pair
1         IL                            IL
2         ER                         IL-ER
3         IL                      IL-ER-IL
4         IL                   IL-ER-IL-IL
5         EL                IL-ER-IL-IL-EL
6         EL             IL-ER-IL-IL-EL-EL
7         IL          IL-ER-IL-IL-EL-EL-IL
8         IL       IL-ER-IL-IL-EL-EL-IL-IL
9         IL    IL-ER-IL-IL-EL-EL-IL-IL-IL
10        IR IL-ER-IL-IL-EL-EL-IL-IL-IL-IR

我只想保留成对的 两个 连续试验。任何的想法?注意:我更喜欢 tidyverse 选项。

使用lag.

df %>% 
  mutate(pair = paste(lag(condition),condition,sep="-"))

   condition  pair
1         ER NA-ER
2         EL ER-EL
3         IR EL-IR
4         ER IR-ER
5         ER ER-ER
6         IR ER-IR
7         IR IR-IR
8         IR IR-IR
9         IR IR-IR
10        EL IR-EL