簡體   English   中英

dataframe 中的逐行操作,其中每一行取決於 R 中的前一行

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

我想在 dataframe 中從一列和某行中找到一些值與來自同一列和前一行的值的組合。 這是一個可重現的例子。

我有四種可能的條件,我想識別成對的(兩)連續行。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM