我的問題是根據另一列帶有日期的日期向資料框中添加一列。每個 id 的最早日期應該用 0 編號,所有后續天數與第 0 天不同,按 id 分組。
我使用 tidyverse 函式進行了幾次不成功的嘗試,并看到有人撰寫復雜的函式來創建此類資料的執行緒。但我希望我想要的輸出非常簡單?
輸入:
id date
1 01-02-2010
1 02-02-2010
1 03-02-2010
2 07-02-2010
2 08-02-2010
2 09-02-2010
期望的輸出:
id date day
1 01-02-2010 0
1 02-02-2010 1
1 03-02-2010 2
2 07-02-2010 0
2 08-02-2010 1
2 09-02-2010 2
uj5u.com熱心網友回復:
library(dplyr)
df %>%
mutate(date = lubridate::dmy(date)) %>%
group_by(id) %>%
mutate(day = date - first(date))
#> # A tibble: 6 x 3
#> # Groups: id [2]
#> id date day
#> <int> <date> <drtn>
#> 1 1 2010-02-01 0 days
#> 2 1 2010-02-02 1 days
#> 3 1 2010-02-03 2 days
#> 4 2 2010-02-07 0 days
#> 5 2 2010-08-08 182 days
#> 6 2 2010-02-09 2 days
有資料:
df <- read.table(text =
'id date
1 01-02-2010
1 02-02-2010
1 03-02-2010
2 07-02-2010
2 08-08-2010
2 09-02-2010 ', header = TRUE)
uj5u.com熱心網友回復:
這是使用的解決方案lubridate(不在 tidyverse 中,但可以很好地使用它):
library(tidyverse)
df <- read_table("id date
1 01-02-2010
1 02-02-2010
1 03-02-2010
2 07-02-2010
2 08-02-2010
2 09-02-2010") %>%
select(-X3)
#> Warning: Missing column names filled in: 'X3' [3]
#> Warning: 1 parsing failure.
#> row col expected actual file
#> 6 -- 3 columns 2 columns literal data
library(lubridate)
#>
#> Attaching package: 'lubridate'
#> The following objects are masked from 'package:base':
#>
#> date, intersect, setdiff, union
df %>%
group_by(id) %>%
mutate(
date = dmy(date),
day = as.numeric(date - min(date)))
#> # A tibble: 6 × 3
#> # Groups: id [2]
#> id date day
#> <dbl> <date> <dbl>
#> 1 1 2010-02-01 0
#> 2 1 2010-02-02 1
#> 3 1 2010-02-03 2
#> 4 2 2010-02-07 0
#> 5 2 2010-02-08 1
#> 6 2 2010-02-09 2
由reprex 包(v2.0.1)于 2021 年 11 月 2 日創建
uj5u.com熱心網友回復:
使用lubridate和dplyr:
library(dplyr)
library(lubridate)
PS 如果已經匯入,則不需要匯入包。
df %>% group_by(id) %>%
mutate(day = day(dmy(date)) - day(dmy(first(date))))
輸出:
# A tibble: 6 x 3
# Groups: id [2]
id date day
<dbl> <chr> <dbl>
1 1 01-02-2010 0
2 1 02-02-2010 1
3 1 03-02-2010 2
4 2 07-02-2010 0
5 2 08-08-2010 1
6 2 09-02-2010 2
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/345896.html
上一篇:如何在XSLT中轉換日期時間?
