【发布时间】:2018-01-09 20:45:13
【问题描述】:
我正在研究一个问题,我们试图为时间序列具有(+150 个每日点)的大量对(+40 000)创建时间序列差异
每一行代表我们要比较的两个人
pairs = data.frame("number" = c(1,2,3,4),
"name1" = c("A","B","C","D"),
"name2" = c("B","D","D","A")
)
pairs$name1 <- as.character(pairs$name1)
pairs$name2 <- as.character(pairs$name2)
每一行代表特定个体的时间序列数据
ts = data.frame("name" = c("A","B","C","D"),
"day1" = c(10,12,54,13),
"day2" = c(2,8,47,29),
"day3" = c(1,5,14,36)
)
ts$name <- as.character(ts$name)
我有以下 R 代码,其目标是为每对个体(在我的示例中为 4 个)创建一个新数据框,该数据框的每日时间序列与 ts 数据框不同。这很有效,但是当我尝试在我的真实数据集上运行它时非常慢,其中对有 40 000 行和 ts 大约 150 列。任何人都知道我如何加快速度?我尝试使用 lapply 但不知道如何创建差异并将其存储在新的时间序列中。谢谢!!
diffs<-data.frame(matrix(ncol=ncol(ts)))
colnames(diffs)<-colnames(ts)
for (row in 1:nrow(pairs)){
row1<-ts[(ts$name==pairs[row,"name1"]),]
row2<-ts[(ts$name==pairs[row,"name2"]),]
difference<-rbind(row1,row2)
difference[3,1]<-pairs[row,"number"]
difference[3,2:ncol(difference)]<-difference[1,2:ncol(difference)]-difference[2,2:ncol(difference)]
diffs<-rbind(diffs,difference[3,])
}
【问题讨论】: