首页 > 解决方案 > 识别逆序组合

问题描述

我有看起来像这样的数据:

  X Y  TOTAL PAIR
1 A B     1   AB
2 B A     2   BA
3 C D     3   CD
4 D C     4   DC
5 E F     5   EF

我想添加一个变量 PAIR_ID 以任何组合捕获相同的 ID。所以顺序无关紧要。它应该如下所示:

  X Y  TOTAL PAIR  PAIR_ID
1 A B     1   AB       1
2 B A     2   BA       1
3 C D     3   CD       2
4 D C     4   DC       2
5 E F     5   EF       3

目标是获得一个包含每对总数的 df。所以是这样的:

    PAIR_ID   PAIR_TOTAL
1       1          3
2       2          7
3       3          5

我的问题是如何获得该 PAIR_ID 变量。我难住了。感谢任何帮助。

标签: r

解决方案


一种选择是

library(dplyr)
out <- df1 %>% 
         mutate(PAIR_ID = group_indices(., pmax(X, Y), grp2 = pmin(X,Y)) )

out %>% 
    group_by(PAIR_ID) %>%
    summarise(PAIR_TOTAL = sum(TOTAL))
# A tibble: 3 x 2
#  PAIR_ID PAIR_TOTAL
#    <int>      <int>
#1       1          3
#2       2          7
#3       3          5

数据

df1 <- structure(list(X = c("A", "B", "C", "D", "E"), Y = c("B", "A", 
"D", "C", "F"), TOTAL = 1:5, PAIR = c("AB", "BA", "CD", "DC", 
"EF")), class = "data.frame", row.names = c("1", "2", "3", "4", 
"5"))

推荐阅读