我在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 。也许是因为我的身份证代码也用数字。
1条答案
按热度按时间0yg35tkg1#
你对对子进行排序的想法是正确的。只需要2个,就可以很容易地使用矢量化的
pmin
和pmax
:然后,您可以使用任何标准代码来删除重复项,如