假设我们有以下数据框:
df <- data.frame(group = c('A', 'A', 'A', 'B', 'B', 'B'),
start_time = c('2022-10-01 10:00:00', '2022-10-01 11:00:00', '2022-10-01 12:00:00', '2022-10-01 10:00:00', '2022-10-01 11:00:00', '2022-10-01 12:00:00'),
end_time = c('2022-10-01 10:30:00', '2022-10-01 11:30:00', '2022-10-01 12:30:00', '2022-10-01 11:00:00', '2022-10-01 12:00:00', 'NA'))
其中group为分类变量,start_time和end_time为日期时间变量。
要按组计算start_time和end_time之间的行数,可以使用data.table和lubridate库。具体代码如下:
library(data.table)
library(lubridate)
setDT(df)[, row_count := sum(between(ymd_hms(start_time), ymd_hms(end_time), ymd_hms(df$start_time)) & !is.na(df$end_time)), by = group]
这里使用setDT()将数据框转换为data.table类型,然后使用between()函数计算start_time和end_time之间的行数。ymd_hms()函数将字符型的日期时间变量转换为lubridate库中的日期时间格式。最后,使用sum()函数计算行数并使用by参数将计算结果按组汇总,并将结果存储在新列row_count中。