我有一个包含两列的数据框-一列是开始日期,另一列是结束日期。我需要获取一个包含两列的新数据框-一列是日期,另一列是日期介于开始和结束之间的第一个数据框的观测计数。
具有:
dates<-data.frame("Start"=seq(as.Date("2017/1/1"),by="day", length.out = 5),"End"=seq(as.Date("2017/1/3"),by="day", length.out = 5))
Start End
2017-01-01 2017-01-03
2017-01-02 2017-01-04
2017-01-03 2017-01-05
2017-01-04 2017-01-06
2017-01-05 2017-01-07
需求:
Date Count
2017-01-01 1
2017-01-02 2
2017-01-03 3
2017-01-04 3
2017-01-05 3
2017-01-06 2
2017-01-07 1
我可以使用for循环,但在R中有更好的方法吗?
5条答案
按热度按时间wh6knrhe1#
这些基本选项避免分组。
第一个选项使用逻辑来避免
Map
或整形。它是:1.给予我所有的
dates$Start
选项1.与
dates$End
合并,当两者之间的差异不为0时(即,如果它是相同的日期,我不应该重复计数)。1.合并
dates$Start
加上seq_len
,其中,再次,之间的差异不是0。第二个选项
Vectorize()
是seq.Date()
函数。然后它只是简单地组合结果。性能:对于@akrun的基本选项,我将
table()
结果 Package 在data.frame()
中,以便每个人都产生某种类型的data.frame
。参考代码:
yk9xbfzb2#
以下是使用
data.table
的可能性:mwkjh3gx3#
使用基数R,我们可以在
Start
和End
日期之间创建一个序列,并使用table
计算所有日期的频率。bwntbbo34#
涉及
dplyr
和tidyr
的可能性可能是:或者加上
lubridate
:mmvthczy5#
一个选项是使用
map2
获取相应的'Start','End'列之间的'Date'序列,unnest
list
输出并获取count
或
base R
中的选项