我有一个与此问题类似的问题(subtract value from previous row by group),但是我想通过组ID从当前日期中减去前一个日期,以便获得估计的天数。我尝试通过替换“值”来编辑先前建议的脚本 “日期”。 尽管我尝试了不同的建议方法,但是我不断收到此错误消息“ mutate_impl(.data,点)中的错误: 评估错误:无法首先为签名“ POSIXct”找到函数的继承方法。”
Data
id date
2380 10/30/12
2380 10/31/12
2380 11/1/12
2380 11/2/12
20100 10/30/12
20100 10/31/12
20100 11/1/12
20100 11/2/12
20103 10/30/12
我想要这种桌子
Data
id date date_difference(in days)
2380 10/30/12 0
2380 10/31/12 1
2380 11/1/12 2
2380 11/2/12 3
20100 10/30/12 0
20100 10/31/12 2
20100 11/1/12 3
20100 11/2/12 4
20103 10/30/12 0
20103 10/31/12 1
答案 0 :(得分:3)
library(tidyverse)
library(lubridate)
#>
#> Attaching package: 'lubridate'
#> The following object is masked from 'package:base':
#>
#> date
df <- tribble(~id, ~date,
2380, "10/30/12",
2380, "10/31/12",
2380, "11/1/12",
2380, "11/2/12",
20100, "10/30/12",
20100, "10/31/12",
20100, "11/1/12",
20100, "11/2/12",
20103, "10/30/12",
20103, "10/31/12")
df %>%
mutate(date = mdy(date)) %>%
group_by(id) %>%
mutate(date_difference = as.numeric(date - first(date)))
#> # A tibble: 10 x 3
#> # Groups: id [3]
#> id date date_difference
#> <dbl> <date> <dbl>
#> 1 2380 2012-10-30 0
#> 2 2380 2012-10-31 1
#> 3 2380 2012-11-01 2
#> 4 2380 2012-11-02 3
#> 5 20100 2012-10-30 0
#> 6 20100 2012-10-31 1
#> 7 20100 2012-11-01 2
#> 8 20100 2012-11-02 3
#> 9 20103 2012-10-30 0
#> 10 20103 2012-10-31 1
由reprex package(v0.2.1)于2018-11-29创建
答案 1 :(得分:0)
首先,创建一个计算日差的函数
library(stringr)
day_diff <- function(day) {
days <- difftime(day, "2012-10-30", "days")
str_extract(days, "\\-*\\d+\\.*\\d*")
}
然后创建一个包含日差的新列
df$date_difference <- unlist(lapply(df$date, day_diff))
您可能会看到缺少时区的警告(),但是您可以在其中表示(或忽略)。