我正在尝试从数据框中选择日期范围(稍后也是所述数据框中的参与者)。通常,如果您希望将日期范围增加几天,这相对容易。
我的问题是我不希望增加数天,而是按行来查看何时进行100次观察。我想问题是我的数据框中没有连续几天,否则我可以做min(as.Date(data$date) + days(100)
我也试过seq.Date(min(as.Date(data$date), length.out = 100, by = 1))
,但这也行不通。
以下是一些示例数据:
dates <- data.frame(date = c("2015-01-08", "2015-01-05", "2015-01-05",
"2014-12-22", "2014-11-08", "2014-11-01", "2014-10-24", "2014-10-24",
"2014-10-18", "2014-09-26", "2014-09-21", "2014-09-19", "2014-08-14",
"2014-08-08", "2014-08-08", "2014-07-10", "2014-07-10", "2014-06-23",
"2014-06-20", "2014-06-13", "2014-06-11", "2014-06-07", "2014-06-03",
"2014-06-02", "2014-05-23", "2014-05-16", "2014-05-02", "2014-04-25",
"2014-04-11", "2014-04-09", "2014-04-01", "2014-03-27", "2014-03-25",
"2014-03-20", "2014-03-14", "2014-03-06", "2014-03-01"))
现在,当我跑:seq.Date(min(as.Date(dates$date)), length.out = 20, by = 1)
时,我确实得到了20个日期:
[1] "2014-03-01" "2014-03-02" "2014-03-03" "2014-03-04" "2014-03-05" "2014-
03-06" "2014-03-07"
[8] "2014-03-08" "2014-03-09" "2014-03-10" "2014-03-11" "2014-03-12" "2014-
03-13" "2014-03-14"
[15] "2014-03-15" "2014-03-16" "2014-03-17" "2014-03-18" "2014-03-19" "2014-
03-20"
但是:那些是与数据框中的日期不匹配的连续日期,所以我无法告知从最低/最早日期开始的100次观察。
任何帮助将不胜感激!我相信我不能成为唯一遇到这个问题的人......虽然在这里找不到任何东西。
答案 0 :(得分:1)
您可以使用以下内容:
N = 20 # set N to be find difference between 1st and Nth time period
diff(sort(as.Date(dates$date))[c(1,N)])
# Time difference of 114 days
打破这种情况:1)sort(as.Date(dates$date))
将字符向量转换为日期类型,并按升序排列。 2)[c(1,N)]
子集以查找最早的(第一个)日期和第N个之后的日期。 3)diff()
计算两个日期之间的差异。
答案 1 :(得分:0)
感谢@dww的帮助,我能够构建以下函数,它可以很好地工作(随意使用):
time_to_100 <- function(dataframe){
N = 100 # set number of observations you want to 'check'
output <- vector("double", length(levels(dataframe$part_id)))
# output vector based on number of indiv. part_ids (part_id = factor)
for(part in dataframe$part_id){
output[[part]] <-
as.numeric(diff(sort(as.Date(dataframe[dataframe$part_id ==
part,]$created))[c(1,N)]), units = "days") # created = the date column
}
return(output)
}