假设我们有以下数据框:
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
中。