首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R data.table按分组data.table合并

R data.table按分组data.table合并
EN

Stack Overflow用户
提问于 2022-10-31 11:19:27
回答 1查看 46关注 0票数 1

我有一个大型数据集(大约800米行)作为data.table。数据集由数千个ID的等距时间序列数据组成。我的问题是,丢失的值最初没有编码,但实际上在dataset中缺失。因此,我想添加缺少数据的行。我知道每个ID都应该有相同的时间戳。

考虑到数据集的大小,我最初的想法是创建一个data.table,其中包括数据应该包含的每个时间步骤,然后为主data.table的每个ID使用合并与data.table。然而,到目前为止,如果我的具有所有时间步骤的data.table (complete_dt)也包括ID列,我才能做到这一点。但是,这会产生大量冗余信息,因为每个ID都应该有相同的时间步骤。

为了简单起见,我的数据是等距的,所以我用一个简单的整数列替换了POSIXct列。

代码语言:javascript
复制
library(data.table)

# My main dataset 
set.seed(123)
main_dt <- data.table(id = as.factor(rep(1:3, c(5,4,3))), 
                   pseudo_time = c(1,3,4,6,7, 1,3,4,5, 3,5,6),
                   value = runif(12))

# Assuming that I should have the pseudo timesteps 1:7 for each ID
# Given the size of my real data I would like to create the pseudo time not for each ID but only once
complete_dt <- main_dt[, list(pseudo_time = 1:7), by = id]

#The dt I need to get in the end
result_dt <- merge.data.table(main_dt,complete_dt, all = TRUE )

我见过这样一个类似的问题-- Merge (full join) recursively one data.table with each group of another data.table,但我没有把它应用到我的问题上。

任何帮助,以一个更有效的解决方案,然后我的,将不胜感激。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-31 11:40:00

这里有另一种选择,但可能并不是更有效率:

代码语言:javascript
复制
setkey(main_dt, id, pseudo_time)
main_dt[CJ(id, pseudo_time = 1:7, unique = TRUE)]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74262492

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档