這個問題在這里已經有了答案: 為什么我的 dplyr group_by & summary 無法正常作業?(與plyr的名稱沖突) (5個答案) 13 小時前關閉。
我需要完成看似相對簡單的任務,但我不確定從哪里開始。
我有一個包含 2 個相關列的資料框(DF1)。一個是ID,另一個是日期。我想要兩個新的 cols,它們按組為我提供上一個事件的日期和下一個事件的日期。這將要求我按 ID 分組并按日期安排。
我嘗試使用 dplyr,但它似乎有問題。我首先嘗試的是:
ID<-c("A","A","B","A","B","B","B","A")
date <- c("1/1/2021"
, "1/5/2021"
, '2/1/2021'
, "1/7/2021"
, "2/2/2021"
, "2/5/2021"
, "2/8/2021"
, "1/9/2021")
DF1 <- data.frame(ID, date)
DF1
ID date
A 1/1/2021
A 1/5/2021
B 2/1/2021
A 1/7/2021
B 2/2/2021
B 2/5/2021
B 2/8/2021
A 1/9/2021
DF2 <- DF1 %>% group_by(ID) %>%arrange(date) %>%
mutate(nextdate= dplyr::lead(date, n = 1, default = NA))
DF2
ID date nextdate
A 1/1/2021 1/5/2021
A 1/5/2021 1/7/2021
A 1/7/2021 1/9/2021
A 1/9/2021 2/1/2021
B 2/1/2021 2/2/2021
B 2/2/2021 2/5/2021
B 2/5/2021 2/8/2021
B 2/8/2021 NA
這很接近,但第 4 行應該是 na,所以它似乎放棄了分組。當我放下排列時,它會給我一些奇怪的東西(DF3):
DF3 <- DF1 %>% group_by(ID) %>%
mutate(nextdate= dplyr::lead(date, n = 1, default = NA))
DF3
ID date nextdate
1 A 1/1/2021 1/5/2021
2 A 1/5/2021 2/1/2021
3 B 2/1/2021 1/7/2021
4 A 1/7/2021 2/2/2021
5 B 2/2/2021 2/5/2021
6 B 2/5/2021 2/8/2021
7 B 2/8/2021 1/9/2021
8 A 1/9/2021 NA
我在其他一些帖子上看到了一個建議,嘗試按 ID 分組,然后使用“order_by”和 mutate 命令進行安排。當我這樣做時,這就是我得到的(DF4):
DF4 <- DF1 %>% group_by(ID) %>%
mutate(nextdate= dplyr::lead(date, order_by=date, n = 1, default = NA))
DF4
ID date nextdate
1 A 1/1/2021 1/5/2021
2 A 1/5/2021 1/7/2021
3 B 2/1/2021 2/2/2021
4 A 1/7/2021 1/9/2021
5 B 2/2/2021 2/5/2021
6 B 2/5/2021 2/8/2021
7 B 2/8/2021 NA
8 A 1/9/2021 2/1/2021
所以,我想問題是,我怎樣才能實作以下(DF5),也許不使用 dplyr:
DF2
ID date nextdate prevdate
A 1/1/2021 1/5/2021 NA
A 1/5/2021 1/7/2021 1/1/2021
A 1/7/2021 1/9/2021 1/5/2021
A 1/9/2021 NA 1/7/2021
B 2/1/2021 2/2/2021 NA
B 2/2/2021 2/5/2021 2/1/2021
B 2/5/2021 2/8/2021 2/5/2021
B 2/8/2021 NA 2/5/2021
uj5u.com熱心網友回復:
我不明白它似乎作業正常
library(tidyverse)
ID<-c("A","A","B","A","B","B","B","A")
date <- c("1/1/2021"
, "1/5/2021"
, '2/1/2021'
, "1/7/2021"
, "2/2/2021"
, "2/5/2021"
, "2/8/2021"
, "1/9/2021")
DF1 <- data.frame(ID, date)
DF1 |>
arrange(ID,date) |>
group_by(ID) |>
mutate(nextdate = lead(date),
lastdate = lag(date))
#> # A tibble: 8 x 4
#> # Groups: ID [2]
#> ID date nextdate lastdate
#> <chr> <chr> <chr> <chr>
#> 1 A 1/1/2021 1/5/2021 <NA>
#> 2 A 1/5/2021 1/7/2021 1/1/2021
#> 3 A 1/7/2021 1/9/2021 1/5/2021
#> 4 A 1/9/2021 <NA> 1/7/2021
#> 5 B 2/1/2021 2/2/2021 <NA>
#> 6 B 2/2/2021 2/5/2021 2/1/2021
#> 7 B 2/5/2021 2/8/2021 2/2/2021
#> 8 B 2/8/2021 <NA> 2/5/2021
由reprex 包(v2.0.1)于 2021 年 10 月 18 日創建
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/324588.html
下一篇:如何為小標題拆分字串
