gpt4 book ai didi

R 合并 data.frames asof join

转载 作者:行者123 更新时间:2023-12-02 12:23:38 24 4
gpt4 key购买 nike

我有一大堆时间间隔不规则的数据帧。

我想创建一个新的 data.frame 并将其他 data.frame 加入其中,对于加入的每个 data.frame,从新的 data.frame 中选取最新的值。

例如,下面的 listOfDataFrames 包含一个 data.frames 列表,每个 data.frames 都有一个以秒为单位的时间列。我找到总范围,将范围除以 60,然后对其进行排序,以获得完整分钟的递增 seqn。现在我需要将 data.frames 列表合并到这个新 seqn 的左侧。例如如果 mypoints 中的值为 60,则加入的值应为最新值 <= 60。

xrange <- range(lapply(listOfDataFrames,function(x) range(x$Time)))
mypoints <- 60*do.call(seq,as.list(xrange%/%60))

我相信这有时称为 asof 连接。

有一个简单的程序可以做到这一点吗?

谢谢

编辑:这是我目前使用的

xrange <- range(lapply(listOfDataFrames,function(x) range(x$Time)))
mypoints <- 60*seq(xrange[1]%/%60,1+xrange[2]%/%60)
result <- data.frame(Time=mypoints)
for(index in 1:length(listOfDataFrames))
{
x<-listOfDataFrames[[index]]
indices <- which(sort(c(mypoints,x$Time)) %in% mypoints) - 1:length(mypoints)
indices[indices==0] <- NA
newdf<-data.frame(new=x$Result[indices])
colnames(newdf)<-paste("S",index,sep="")
result <- cbind(result,newdf)
}

编辑:完整示例

AsOfJoin <- function (listOfDataFrames) {
xrange <- range(lapply(listOfDataFrames,function(x) range(x$Time)))
mypoints <- 60*seq(xrange[1]%/%60,1+xrange[2]%/%60)
result <- data.frame(Time=mypoints)
for(index in 1:length(listOfDataFrames))
{
x<-listOfDataFrames[[index]]
indices <- which(sort(c(mypoints,x$Time)) %in% mypoints) - 1:length(mypoints)
indices[indices==0] <- NA
newdf<-data.frame(new=x$Result[indices])
colnames(newdf)<-paste("S",index,sep="")
result <- cbind(result,newdf)
}
result[is.na(result)]<-0
result
}


a<-data.frame(Time=c(28947.5,28949.6,29000),Result=c(10,15,9))
b<-data.frame(Time=c(28947.8,28949.5),Result=c(14,19))
listOfDataFrames <- list(a,b)
result<-AsOfJoin(listOfDataFrames)

> a
Time Result
1 28947.5 10
2 28949.6 15
3 29000.0 9
> b
Time Result
1 28947.8 14
2 28949.5 19
> result
Time S1 S2
1 28920 0 0
2 28980 15 19
3 29040 9 19

最佳答案

data.table提供非常快速的开箱即用的 asof 连接。另请参阅This post举个例子

关于R 合并 data.frames asof join,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6585820/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com