r - 计算有条件的元素组合
问题描述
我的问题类似于此r count 组中元素的组合,但是,首先,我想在列Comb中按组对所有潜在组合进行分组,其次,根据列n中的年份计算组合的出现次数。
使用相同的模拟数据集:
> dat = data.table(group = c(1,1,1,2,2,2,3,3), id=c(10,11,12,10,11,13,11,13))
> dat
group id year
1: 1 10 2010
2: 1 11 2010
3: 1 12 2010
4: 2 10 2011
5: 2 11 2011
6: 2 13 2011
7: 3 11 2012
8: 3 13 2012
期望的结果:
> dat
group Comb year n
1: 1 10 11 2010 1
2: 1 11 12 2010 1
3: 1 12 10 2010 1
4: 2 10 11 2011 2
5: 2 11 13 2011 1
6: 2 13 10 2011 1
7: 3 11 13 2012 2
我非常感谢 dplyr 的可能解决方案。
谢谢
解决方案
这是一个解决方案,首先显示为 data.table,然后显示为 dplyr。过程是相同的:我们在组中自加入,过滤 id 组合的顺序一致(任何顺序都可以,我们选择first id < second id
),按组合分组以对行进行编号,并删除未使用的列。
dat = data.table(group = c(1,1,1,2,2,2,3,3), id=c(10,11,12,10,11,13,11,13))
## with data.table
merge(dat, dat, by = "group", allow.cartesian = TRUE)[
id.x < id.y, ][
, Comb := paste(id.x, id.y)][
, n := 1:.N, by = .(Comb)
][, .(group, Comb, n)]
# group Comb n
# 1: 1 10 11 1
# 2: 1 10 12 1
# 3: 1 11 12 1
# 4: 2 10 11 2
# 5: 2 10 13 1
# 6: 2 11 13 1
# 7: 3 11 13 2
## with dplyr
dat %>% full_join(dat, by = "group") %>%
filter(id.x < id.y) %>%
group_by(Comb = paste(id.x, id.y)) %>%
mutate(n = row_number()) %>%
select(group, Comb, n)
# # A tibble: 7 x 3
# # Groups: Comb [5]
# group Comb n
# <dbl> <chr> <int>
# 1 1 10 11 1
# 2 1 10 12 1
# 3 1 11 12 1
# 4 2 10 11 2
# 5 2 10 13 1
# 6 2 11 13 1
# 7 3 11 13 2
推荐阅读
- c++ - 重载参数不是类或枚举的运算符
- python - 为什么我在虚拟环境中安装的依赖项也会使用 pip 出现在外部
- javascript - 如何从firestore的firebase函数获取随机数据
- x86 - % 是什么意思?objdump 输出
- python - 问题:无法使用长度与值不同的多索引选择索引器进行设置
- c# - 趋向于零/无运动的相泽吸引子
- java - 我怎么能导入带有符号组ID“-”的java依赖?
- javascript - 为什么在警报中调用 input.value 时返回未定义
- amp-html - 响应式图像的 AMP 问题:amp-img 标签覆盖了 figcaption 标签
- javascript - 能够通过获取 api 请求和错误检查来使用数据