我有以下数据框:

FID1    FID2    PropIBD
ABC    DEF  0.5000
DEF    ABC  0.0000
GHI   LMO  0.002
LMO   GHI   0
L454   9G09 0

如何从该数据帧中删除重复/反转且PropIBD列为0的行?

举个例子,前两行是重复的,因为第一行的FID1等于第二行的FID2,第一行的FID2等于第二行的FID1.因此,我想要以下最终数据框架:

 FID1    FID2    PropIBD
    ABC    DEF  0.5000
    GHI   LMO  0.002
    L454  9G09 0

我怎样才能在R中做到这一点?

推荐答案

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

R相关问答推荐

是否有任何解决方案可以优化VSCode中RScript的图形绘制?

变量计算按R中的行更改

在通过最大似然估计将ODE模型与数据匹配时,为什么要匹配实际参数的转换值?

如何根据条件计算时差(天)

R箱形图gplot 2 4组但6个参数

如何编辑ggplot的图例字使用自定义对象(gtable)?'

如何将移除事件分配给动态创建的按钮?

如何通过Docker部署我的shiny 应用程序(多个文件)

自动变更列表

在R中使用download. file().奇怪的URL?

在另存为PNG之前隐藏htmlwidget绘图元素

提取第一个下划线和最后一个下划线之间的任何内容,例外情况除外

计算直线上点到参考点的总距离

R -使用矩阵reshape 列表

如何阻止围堵地理密度图?

是否可以将线性模型的p值添加到tbl_summary中

按组跨多列创建伪变量

如何在条形图中的x和填充变量中包含多个响应变量?

如何在一个GGPLATE中绘制多个灰度平滑?

如果y中存在x中的值,则将y行中的多个值复制到相应的x行中