无论列的顺序如何聚合

前端之家收集整理的这篇文章主要介绍了无论列的顺序如何聚合前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想将数据帧聚合两列,以便它们的变化只存在一次.值列应由聚合函数聚合,如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

猜你在找的设计模式相关文章