簡體   English   中英

如何在 r dplyr 中正確使用滯后 function?

[英]How to use the lag function correctly in r dplyr?

當在下面運行 R/dplyr 代碼時,我得到下面不正確的 output 列reSeq中的最后一個單元格。 代碼在reSeq列的最后一個單元格中生成值 8,當通過代碼中的lag() function 時,它應該生成 7。我使用lag() function 有什么問題? 另請參閱底部的圖像,它可以更好地解釋我正在嘗試做的事情。

   Element Group eleCnt reSeq
   <chr>   <dbl>  <int> <int>
 1 R           0      1     1
 2 R           0      2     2
 3 X           0      1     1
 4 X           1      2     2
 5 X           1      3     2
 6 X           0      4     4
 7 X           0      5     5
 8 X           0      6     6
 9 B           0      1     1
10 R           0      3     3
11 R           2      4     4
12 R           2      5     4
13 X           3      7     7
14 X           3      8     7
15 X           3      9     8

library(dplyr)

myDF <- data.frame(
  Element = c("R","R","X","X","X","X","X","X","B","R","R","R","X","X","X"),
  Group = c(0,0,0,1,1,0,0,0,0,0,2,2,3,3,3)
)

myDF %>% 
  group_by(Element) %>%
    mutate(eleCnt = row_number()) %>%
  ungroup()%>%
  mutate(reSeq = eleCnt) %>%
  mutate(reSeq = ifelse(
    Element == lag(Element)& Group == lag(Group) & Group > 0, 
    lag(reSeq),
    eleCnt)
  )

以上是 Excel 的嘗試翻譯,如下圖所示。 我是 R 的新手,從 Excel 遷移過來。 我正在嘗試復制 D 列“目標”,以黃色突出顯示,右側的公式。 下面顯示了正確的 output,包括單元格 D17 中所需的 7,我無法使用上述 R 代碼復制。

在此處輸入圖像描述

將“目標”的推導分解為 2 列,步驟 1 和步驟 2,在下圖中以黃色和藍色突出顯示(下面的步驟 2 與上圖中的目標相同)(2 步是我如何讓 R 代碼工作,如圖所示解決方案之一):

在此處輸入圖像描述

下面的代碼有效。 為了反映逐步 R 解決方案,我將 Excel“目標”計算分解為 OP 中第二張圖像中的兩個步驟。

library(dplyr)
library(tidyr)

myDF <- data.frame(
  Element = c("R","R","X","X","X","X","X","X","B","R","R","R","X","X","X"),
  Group = c(0,0,0,1,1,0,0,0,0,0,2,2,3,3,3)
)

myDF %>% 
  group_by(Element) %>%
    mutate(eleCnt = row_number()) %>%
  ungroup()%>%
  mutate(reSeq = ifelse(Group == 0 | Group != lag(Group), eleCnt,0)) %>%
  mutate(reSeq = na_if(reSeq, 0)) %>%
  group_by(Element) %>%
    fill(reSeq) %>%
  ungroup

暫無
暫無

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

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