R 使用条件计算元素的组合

R 使用条件计算元素的组合,r,dplyr,data.table,R,Dplyr,Data.table,我的问题与此类似,但是,首先,我想将所有潜在组合按组分组在一列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:

我的问题与此类似,但是,首先,我想将所有潜在组合按组分组在一列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组合顺序一致的位置(任何顺序都可以,我们选择
第一个id<第二个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
dat=data.table(组=c(1,1,1,2,2,2,3,3),id=c(10,11,12,10,11,13,11,13))
##使用data.table
合并(dat,dat,by=“group”,allow.cartesian=TRUE)[
id.x%完全加入(dat,by=“group”)%%>%
过滤器(id.x%
分组依据(Comb=paste(id.x,id.y))%>%
变异(n=行数())%>%
选择(组、梳、n)
##tibble:7 x 3
##组:梳[5]
#群梳
#     
# 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

我不理解输出中的
n
列。也不是你的组合。在输出中,第4行有组合
10 11
,第5行有组合
11 10
。为什么秩序在这里重要,而不是在以前?为什么第2组有
11 10
,而第1组没有?为什么这些值是
n
2
?如果您正在寻找dplyr解决方案,我可以问一下为什么使用data.table和not tible吗?根据您的要求添加正确的标签可能会很有用。我已经根据@Gregor注释更改了所需的结果。顺序并不重要,重要的是获得每个组的所有潜在id组合。然后,根据n年和组对事件进行编号。我希望这能有所帮助。我还是不懂
n
。如果我们查看您的输入,在
year=2010
group=1
中,有3个ID,都是唯一的,
10
11
12
group=1,year=2010
的期望结果有3行,每个
Comb
对应一行,
n
对应所有行。这对我来说很有意义。但是,
group=2
year=2011
的输入看起来是一样的:3行,3个唯一ID。但是在输出中,
Combs=10 11
具有
n=2
。为什么输出行4中的
n=2
,而输出行1中的
n=1
。在
第7行
comb
11 13
n=2
中类似,导致相同的组合出现在
第5行
中。