首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于独立data.table的子集data.table

基于独立data.table的子集data.table
EN

Stack Overflow用户
提问于 2019-12-25 15:55:18
回答 2查看 45关注 0票数 1

我有一张主桌

代码语言:javascript
复制
library(data.table); set.seed(42)
D1 <- data.table(id=rep(1:3,each=2), name=rep(c("a","b")), val=runif(6,0,1))
> D1
   id name       val
1:  1    a 0.9148060
2:  1    b 0.9370754
3:  2    a 0.2861395
4:  2    b 0.8304476
5:  3    a 0.6417455
6:  3    b 0.5190959

为每个id提供两个值,名为ab。要选择的值是在辅助表中确定的。

代码语言:javascript
复制
D2 <- data.table(id=1:3, name=c("a","a","b"))

我想使用D1来对D2进行子集。我可以在循环中通过ID执行这个ID,但考虑到数据的维度,我希望有一个更有效的解决方案,也许可以使用一个join。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-25 15:56:37

我们可以使用一个连接,它会更快,因为我们已经有了data.table对象

代码语言:javascript
复制
D1[D2, on = .(id, name)]
#  id name       val
#1:  1    a 0.9148060
#2:  2    a 0.2861395
#3:  3    b 0.5190959

或者是来自inner_joindplyr

代码语言:javascript
复制
library(dplyr)
inner_join(D1, D2)

或在match中使用base R

代码语言:javascript
复制
D2$val <- D1$val[match(paste(D2$id, D2$name), paste(D1$id, D1$name))]
票数 0
EN

Stack Overflow用户

发布于 2019-12-25 16:52:44

一个R基解是通过使用merge(),即,

代码语言:javascript
复制
> merge(D2,D1)
   id name       val
1:  1    a 0.9148060
2:  2    a 0.2861395
3:  3    b 0.5190959
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59479909

复制
相关文章

相似问题

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