无论列的顺序如何聚合
发布时间:2020-12-14 05:00:37 所属栏目:百科 来源:网络整理
导读:我想将数据帧聚合两列,以便它们的变化只存在一次.值列应由聚合函数聚合,如max()或sum() 数据: itemID1 |itemID2 |value---------|---------|-------B0001 |B0001 |1B0002 |B0001 |1B0001 |B0002 |2B0002 |B0002 |0 结果可能是: itemID1 |itemID2 |value---
我想将数据帧聚合两列,以便它们的变化只存在一次.值列应由聚合函数聚合,如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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |