R语言 ID配对和唯一配对计数

x759pob2  于 2023-09-27  发布在  其他
关注(0)|答案(1)|浏览(104)

我在R中写了一个代码,它应该分析两个列P1和P2,它们都包含ID代码和相应的PAIR列。

1.我希望每一个单独的ID码只能用于一对一次,但单独的ID码可以在P1和P2(只是在不同的行)。
1.此外,我想排除逻辑重复。所以,如果一对看起来像这个“X30112_X30101”,那么它可能是这个“X30101_X30112”的重复。
1.从长远来看,我实际上是在寻找配对的最大数量,这是相当棘手的,因为每个ID代码只能使用一次,但数据显示,一个单独的ID代码的配对可以是1:n。
不幸的是,我错过了更好地描述的经验,我认为这可能是一个组合解决方案。我很乐意接受任何帮助。
”到目前为止我尝试了什么?**
到目前为止,我只尝试用一个更简单的dataframe成功地解决了1),它在某种程度上与以下代码一起工作:

# Sample data: df dataframe
    df <- data.frame(
      P1 = c("A", "B", "C", "W"),
      P2 = c("W", "X", "Y", "A"),
      PAIR = c("A_W", "B_X", "C_Y", "W_A")
    )

    # Function to normalize and sort pairs
    normalize_and_sort <- function(pair) {
      elements <- unlist(strsplit(pair, "[_\\.]"))
      sorted_pair <- paste(sort(elements), collapse = "_")
      return(sorted_pair)
     }

     # Normalize and sort the pairs and keep unique pairs
    unique_pairs_df <- data.frame(PAIR = unique(sapply(df$PAIR, normalize_and_sort)))

     # Print the unique_pairs_df
     print(unique_pairs_df)
PAIR
1  A_W
2  B_X
3  C_Y

但这并不适用于我的实际 Dataframe 。也许是因为我的身份证代码也用数字。

0yg35tkg

0yg35tkg1#

你对对子进行排序的想法是正确的。只需要2个,就可以很容易地使用矢量化的pminpmax

df$sorted_pair = with(df, paste(pmin(P1, P2), pmax(p1, p2), sep = "_"))

然后,您可以使用任何标准代码来删除重复项,如

df[!duplicated(df$sorted_pair), ]

相关问题