【发布时间】:2014-12-14 16:56:17
【问题描述】:
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"))
只要DT2$group 包含在DT1$group 中至少两次,我就想在DT2 中添加一列popular,其值为TRUE。所以,在上面的例子中,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
【问题讨论】:
-
DT2是否总是具有与DT1相同的唯一group?如果是这样,那就是DT1[, .(popular = .N >= 2L), by=group] -
嗨@Arun,不,它没有;对不起,我在这里过度简化了示例。
DT2可能包含比DT1更多的组,在这种情况下,流行的应该是FALSE(因为它不包含在DT1$group中至少两次)。 -
+1 表示精心设计的问题
-
这里是非数据表方式!
table(factor(DT1$group, levels = unique(DT2$group))) >= 2
标签: r data.table