Update
以R为基数,你可以使用ave
+pmin/pmax
,例如,
> transform(df, PropIBD = ave(PropIBD, pmin(FID1, FID2), pmax(FID1, FID2), FUN = sum))
FID1 FID2 PropIBD
1 ABC DEF 0.500
2 DEF ABC 0.500
3 GHI LMO 0.002
4 LMO GHI 0.002
5 L454 9G09 0.000
Previous
你可以用aggregate
+pmin/pmax
aggregate(
PropIBD ~ .,
transform(
df,
# for each row, the "smaller" string is put in `FID1` (sorted by alphabetical order), while the "larger" will be put in `FID2`
FID1 = pmin(FID1, FID2),
FID2 = pmax(FID1, FID2)
),
max
)
这给了我们
FID1 FID2 PropIBD
1 ABC DEF 0.500
2 9G09 L454 0.000
3 GHI LMO 0.002
如果你关心FID1/FID2
中元素的顺序,你可以使用igraph
library(igraph)
df %>%
graph_from_data_frame(directed = FALSE) %>%
simplify(edge.attr.comb = "max") %>%
as_data_frame() %>%
setNames(names(df))
这给了我们
FID1 FID2 PropIBD
1 ABC DEF 0.500
2 GHI LMO 0.002
3 L454 9G09 0.000