gpt4 book ai didi

r - data.table R 中的子集 ID 和日期

转载 作者:行者123 更新时间:2023-12-01 12:56:48 25 4
gpt4 key购买 nike

我有一个类似于我创建的下一个示例的大型矩阵(我有 70 列和数百万行):

a <- seq(as.IDate("2011-12-30"), as.IDate("2014-01-04"), by="days")
data <- data.table(ID = 1:length(a), date1 = a)

我想提取 ID 中的所有行,它包含个人的 ID 以及我需要从该个人中提取的日期。一个人可以有多条线路。

a <- seq(as.IDate("2011-12-30"), as.IDate("2014-01-04"), by="week")
b <- seq(as.IDate("2012-01-01"), as.IDate("2014-01-06"), by="week")
IDs <- data.table(ID = 1:length(a), date1 = a, date2 = b)

目前,我的解决方案不是很快,什么会更好?

A <- list()
for(i in 1:dim(IDs)[1]){
A[[i]] <- data[ID == IDs[i,ID] & (date1 %between% IDs[i,.(date1,date2)]),]
}

最佳答案

我认为您正在寻找一个非相等的内部连接:

IDs[data, on=.(ID, date1<=date1, date2>=date1), nomatch=0L, .(ID, date1=i.date1)]

或关联地,

data[IDs, on=.(ID, date1>=date1, date1<=date2), nomatch=0L, .(ID, date1=x.date1)]

或者将其视为非相等半连接:

data[IDs[data, on=.(ID, date1<=date1, date2>=date1), nomatch=0L, which=TRUE]]

输出:

   ID      date1
1: 1 2011-12-30

关于r - data.table R 中的子集 ID 和日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58295088/

25 4 0