我有一个像这样的数据文件:
姓名日期
大卫2019-12-23
大卫2020-1-10
大卫2020-2-13
凯文2019-2-12
凯文2019-3-19
凯文2019-5-1
凯文2019-7-23
基本上,我试图计算每个实例之间的日期差异,具体针对每个人。我目前使用的是以下for-循环:
df$daysbetween <- with(df, ave(as.numeric(date) , name,
FUN=function(x) { z=c(NA,NA);
for( i in seq_along(x)[-(1:2)] ){
z <- c(z, (x[i]-x[i-1]))}
return(z) }) )目前,它计算第二个和第三个之间的差异,以及任何后续实例,非常好。但是,它并不计算第一次约会和第二次约会之间的差别,我需要它。我的代码中的错误来自哪里?会很感激你的帮助。
发布于 2020-07-28 18:13:59
只需使用来自lag包的dplyr:
描述:在向量中找到“以前”(滞后())或“下一步”(铅())值。用于比较当前值后面或之前的值。
df %>%
group_by(name) %>%
mutate(diff = date - lag(date))输出:
name date diff
<chr> <date> <drtn>
1 David 2019-12-23 NA days
2 David 2020-01-10 18 days
3 David 2020-02-13 34 days
4 Kevin 2019-02-12 NA days
5 Kevin 2019-03-19 35 days
6 Kevin 2019-05-01 43 days
7 Kevin 2019-07-23 83 days发布于 2020-07-28 18:05:04
transform(df, diff = ave(Date, Name, FUN = function(x)c(NA,diff(as.Date(x)))))
Name Date diff
1 David 2019-12-23 <NA>
2 David 2020-1-10 18
3 David 2020-2-13 34
4 Kevin 2019-2-12 <NA>
5 Kevin 2019-3-19 35
6 Kevin 2019-5-1 43
7 Kevin 2019-7-23 83https://stackoverflow.com/questions/63139859
复制相似问题