【问题标题】:aggreagate based on bidirectional hits [duplicate]基于双向命中的聚合[重复]
【发布时间】:2018-05-08 21:17:23
【问题描述】:

我有下表:

df <- read.table(textConnection("V1 V2 V3
1  T  Y
                                 4  Y  T
                                 1  O  P
                                 2  Q  E
                                 2  E  Q
                                 5  C  V
                                 2  V  C"), header=TRUE)

我想根据 V2 和 V3 上的双向命中作为 V1 的总和进行聚合。

所以结果是

V1 V2 V3
5  Y  T       ### the order here does not matter (Y T or T Y are the same)
1  O  P
4  Q  E
7  V  C

我的意思是总是可以使用传统的 for 循环来执行此操作,但我认为在 R 中应该有更好的方法来执行此操作?

【问题讨论】:

    标签: r


    【解决方案1】:

    我们可以通过 sorting 遍历“V2”和“V3”的每一行,然后按“V2”和“V3”分组的“V1”的 aggregate 来做到这一点

    df[2:3] <- t(apply(df[2:3], 1, sort))
    aggregate(V1 ~ ., df, sum)
    #  V2 V3 V1
    #1  O  P  1
    #2  E  Q  4
    #3  C  V  7
    #4  T  Y  5
    

    【讨论】:

    • 排序工作正常,我可以看到具有相同值的列,但奇怪的是聚合没有做任何事情。为什么会这样?
    • @ifreak 我正在使用您的示例,它正在获取sumaggregate。所以,我不确定你到底发生了什么。您可以尝试新的 R 会话吗?
    • 好的。我有另一个不相关的问题。谢谢
    猜你喜欢
    • 2020-02-24
    • 1970-01-01
    • 1970-01-01
    • 2018-09-28
    • 2021-11-05
    • 2012-02-02
    • 2021-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多