[英]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.