我有一个看起来像这样的数据框(当然它更大):
> df1
# A tibble: 10 x 4
index1 index2 date1 date2
<int> <int> <date> <date>
1 5800032 6 2012-07-02 2013-09-18
2 5800032 7 2013-09-18 1970-01-01
3 5800254 6 2013-01-04 1970-01-01
4 5800261 5 2012-01-23 2013-02-11
5 5800261 6 2013-02-11 2014-02-05
6 5800261 7 2014-02-05 1970-01-01
7 3002704 7 2012-01-23 1970-01-01
8 3002728 7 2012-10-20 1970-01-01
9 3002810 7 2012-07-18 1970-01-01
10 8504593 3 2012-01-11 1970-01-01
原始变量为:index1
,index2
和date1
。有一个或多个具有相同index1
值的记录(其序列由index2
确定)。我的目标是为date1
的相同值过滤index1
的后续值之间的间隔。这意味着必须至少有两个具有相同index1
值的记录才能创建间隔
所以我创建了date2
变量,它提供了从date1
开始的间隔的结束日期。这简单地等于后续记录date1
(date2[n] = date1[n+1]
)。如果date1[n]
是给定index1
值的最新(或唯一)日期,则为date2[n] <- 0
。
我无法提出更好的想法,而不是按df
和index1
排序index2
并运行for循环:
for (i in 1:(nrow(df1)-1)){
if (df1$index1[i] == df1$index1[i+1]){
df1$date2[i] <- df1$date1[i+1]
}
else{df1$date2[i] <- 0}
}
它有点奏效,但它显然很慢,并且由于某种原因它没有找到&#34;它应该拥有的所有价值。此外,我确信必须有更智能的方式来完成这项任务 - 可能还有sapply
功能。任何想法都表示赞赏!
答案 0 :(得分:0)
您可以使用dplyr
中的延迟创建date2 df1 %>%
group_by(index1) %>%
arrange(index2) %>%
mutate(date2 = lag(date1, default=0))
我没有清楚地理解你问题的过滤部分。您的问题可能与默认日期(1970-01-01)(值=零)
上的过滤有关