首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >检查data.table值在其他data.table中的频率

检查data.table值在其他data.table中的频率
EN

Stack Overflow用户
提问于 2014-10-19 17:26:09
回答 2查看 384关注 0票数 5
代码语言:javascript
复制
 library(data.table)
 DT1 <- data.table(num = 1:6, group = c("A", "B", "B", "B", "A", "C"))
 DT2 <- data.table(group = c("A", "B", "C"))

我想在popular中包含至少两次DT2$group时,向DT2添加一个带有值TRUE的列TRUE。因此,在上面的示例中,DT2应该是

代码语言:javascript
复制
    group popular
 1:     A    TRUE
 2:     B    TRUE
 3:     C   FALSE

怎样才能有效地解决这个问题?

更新示例: DT2实际上可能包含比DT1更多的组,下面是一个更新的示例:

代码语言:javascript
复制
 DT1 <- data.table(num = 1:6, group = c("A", "B", "B", "B", "A", "C"))
 DT2 <- data.table(group = c("A", "B", "C", "D"))

所需的输出将是

代码语言:javascript
复制
    group popular
 1:     A    TRUE
 2:     B    TRUE
 3:     C   FALSE
 4:     D   FALSE
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-19 18:13:07

我只想这样做:

代码语言:javascript
复制
## 1.9.4+
setkey(DT1, group)
DT1[J(DT2$group), list(popular = .N >= 2L), by = .EACHI]
#    group popular
# 1:     A    TRUE
# 2:     B    TRUE
# 3:     C   FALSE
# 4:     D   FALSE ## on the updated example

data.table的联接语法非常强大,因为在连接时,您还可以在j中聚合/选择/更新列。在这里,我们执行一个连接。对于DT2$group中的每一行,在DT1中对应的匹配行上,我们计算j-expression .N >= 2L;通过指定by = .EACHI (请检查1.9.4新闻),我们每次计算j-expression。

1.9.4中,.()作为别名引入到所有ijby中。所以你也可以:

代码语言:javascript
复制
DT1[.(DT2$group), .(popular = .N >= 2L), by = .EACHI]

当您加入单个字符列时,您可以完全放弃.() / J()语法(为了方便起见)。因此,这也可以写成:

代码语言:javascript
复制
DT1[DT2$group, .(popular = .N >= 2L), by = .EACHI]
票数 10
EN

Stack Overflow用户

发布于 2014-10-19 17:49:15

我就是这样做的:首先计算每个组在DT1中出现的次数,然后简单地加入DT2DT1

代码语言:javascript
复制
require(data.table)
DT1 <- data.table(num = 1:6, group = c("A", "B", "B", "B", "A", "C"))
DT2 <- data.table(group = c("A", "B", "C"))

#solution:
DT1[,num_counts:=.N,by=group] #the number of entries in this group, just count the other column
setkey(DT1, group)
setkey(DT2, group)
DT2 = DT1[DT2,mult="last"][,list(group, popular = (num_counts >= 2))]

#> DT2
#   group popular
#1:     A    TRUE
#2:     B    TRUE
#3:     C   FALSE
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26453288

复制
相关文章

相似问题

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