gpt4 book ai didi

r - 检查其他 data.table 中 data.table 值的频率

转载 作者:行者123 更新时间:2023-12-04 16:52:41 24 4
gpt4 key购买 nike

 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"))

我想加一列 popularDT2带值 TRUE每当 DT2$group包含在 DT1$group 中至少两次。所以,在上面的例子中, DT2应该
    group popular
1: A TRUE
2: B TRUE
3: C FALSE

达到此目的的有效方法是什么?

更新示例: DT2实际上可能包含比 DT1 更多的组,所以这里有一个更新的例子:
 DT1 <- data.table(num = 1:6, group = c("A", "B", "B", "B", "A", "C"))
DT2 <- data.table(group = c("A", "B", "C", "D"))

所需的输出将是
    group popular
1: A TRUE
2: B TRUE
3: C FALSE
4: D FALSE

最佳答案

我只是这样做:

## 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的join语法非常强大,在join的同时,你还可以聚合/选择/更新 j中的列。 .在这里我们执行一个连接。对于 DT2$group 中的每一行, 在 DT1 中对应的匹配行上,我们计算 j -表达式 .N >= 2L ;通过指定 by = .EACHI (请检查 1.9.4 NEWS ),我们计算 j - 每次表达。

1.9.4 , .()已在所有 i 中作为别名引入, jby .所以你也可以这样做:
DT1[.(DT2$group), .(popular = .N >= 2L), by = .EACHI]

当您通过单个字符列加入时,您可以删除 .()/ J()完全语法(为方便起见)。所以这也可以写成:
DT1[DT2$group, .(popular = .N >= 2L), by = .EACHI]

关于r - 检查其他 data.table 中 data.table 值的频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26453288/

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