当前位置 : 主页 > 手机开发 > 其它 >

无论列的顺序如何聚合

来源:互联网 收集:自由互联 发布时间:2021-06-22
我想将数据帧聚合两列,以便它们的变化只存在一次.值列应由聚合函数聚合,如max()或sum() 数据: itemID1 |itemID2 |value---------|---------|-------B0001 |B0001 |1B0002 |B0001 |1B0001 |B0002 |2B0002 |B0002 |0 结果
我想将数据帧聚合两列,以便它们的变化只存在一次.值列应由聚合函数聚合,如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),
           itemID2_ = pmax(itemID1, itemID2)) %>%
  summarise_at("value", sum) %>%
  ungroup
网友评论