微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无论列的顺序如何聚合

我想将数据帧聚合两列,以便它们的变化只存在一次.值列应由聚合函数聚合,如max()或sum()

数据:

itemID1  |itemID2  |value
---------|---------|-------
B0001    |B0001    |1
B0002    |B0001    |1
B0001    |B0002    |2
B0002    |B0002    |0

结果可能是:

itemID1   |itemID2   |value
----------|----------|---------
B0001     |B0001     |1
B0001     |B0002     |3          #itemIDs Could also be ordered in the other way
B0002     |B0002     |0

到目前为止,我已经在sql中实现它以通过库sqldf使用它,但是sqldf不支持WITH子句.

是否有可能直接在R中聚合这样的数据帧?

解决方法

使用dplyr和pmin / pmax:

library(dplyr)
df1 %>%
  mutate(ItemID1_ = pmin(itemID1,itemID2),ItemID2_ = pmax(itemID1,itemID2)) %>%
  group_by(ItemID1_,ItemID2_) %>%
  summarize_at("value",sum) %>%
  ungroup

# # A tibble: 3 x 3
#   ItemID1_ ItemID2_ value
#      <chr>    <chr> <int>
# 1    B0001    B0001     1
# 2    B0001    B0002     3
# 3    B0002    B0002     0

关注@ A5C1D2H2I1M1N2O1R2T1的评论后,您可以跳过mutate部分并使用相同的输出

df1 %>%
  group_by(itemID1_ = pmin(itemID1,itemID2_ = pmax(itemID1,itemID2)) %>%
  summarise_at("value",sum) %>%
  ungroup

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐