加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

无论列的顺序如何聚合

发布时间: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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读