我想将数据帧聚合两列,以便它们的变化只存在一次.值列应由聚合函数聚合,如max()或sum() 数据: itemID1 |itemID2 |value---------|---------|-------B0001 |B0001 |1B0002 |B0001 |1B0001 |B0002 |2B0002 |B0002 |0 结果
数据:
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