为了账号安全,请及时绑定邮箱和手机立即绑定

根据无序的列对聚合数据帧

根据无序的列对聚合数据帧

慕哥9229398 2019-11-02 14:35:53
我有一个看起来像这样的数据集:     id1  id2   size1   5400 5505      72   5033 5458      13   5452 2873     244   5452 5213      25   5452 4242     266   4823 4823      47   5505 5400     11其中id1和id2是在一个图形独特节点,并且size是分配给一个值涉及连接它们的边缘从 id1 给 id2。该数据集相当大(超过200万行)。我想这样做是和大小列,按分组无序节点对的id1和id2。例如,在第一行中,我们有id1=5400和id2=5505。数据框中存在另一行,其中id1=5505和id2=5400。在分组的数据中,这两行的size列的总和将添加到单行中。因此,换句话说,我想总结我要对(id1,id2)的(无序)集合进行分组的数据。我找到了一种使用apply使用一个自定义函数来检查整个数据集中的反向列对,但是这样做的速度非常慢。有谁知道用另一种方式做这件事的方法,也许plyr在基本软件包中使用某种方法会更有效?
查看完整描述

3 回答

?
潇潇雨雨

TA贡献1833条经验 获得超4个赞

一种方法是与创建额外的列pmax和pmin的id1和id2如下。我将data.table在这里使用解决方案。


require(data.table)

DT <- data.table(DF)

# Following mnel's suggestion, g1, g2 could be used directly in by

# and it could be even shortened by using `id1` and id2` as their names

DT.OUT <- DT[, list(size=sum(size)), 

        by=list(id1 = pmin(id1, id2), id2 = pmax(id1, id2))]

#     id1  id2 size

# 1: 5400 5505   18

# 2: 5033 5458    1

# 3: 5452 2873   24

# 4: 5452 5213    2

# 5: 5452 4242   26

# 6: 4823 4823    4


查看完整回答
反对 回复 2019-11-02
?
慕后森

TA贡献1802条经验 获得超5个赞

替代方法:


R> library(igraph)

R> DF

   id1  id2 size

1 5400 5505    7

2 5033 5458    1

3 5452 2873   24

4 5452 5213    2

5 5452 4242   26

6 4823 4823    4

7 5505 5400   11

R> g  <- graph.data.frame(DF, directed=F)

R> g  <- simplify(g, edge.attr.comb="sum", remove.loops=FALSE)

R> DF <- get.data.frame(g)

R> DF

   id1  id2 size

1 5400 5505   18

2 5033 5458    1

3 5452 2873   24

4 5452 5213    2

5 5452 4242   26

6 4823 4823    4


查看完整回答
反对 回复 2019-11-02
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

我的aggregate{stats}函数方法:


> df

   id1  id2 size

1 5400 5505    7

2 5033 5458    1

3 5452 2873   24

4 5452 5213    2

5 5452 4242   26

6 4823 4823    4

7 5505 5400   11


> df[1:2] <- t(apply(df[1:2], 1, sort))

> aggregate(size ~ id1 + id2, data=df, FUN=sum)


   id1  id2 size

1 4823 4823    4

2 2873 5452   24

3 4242 5452   26

4 5213 5452    2

5 5033 5458    1

6 5400 5505   18


查看完整回答
反对 回复 2019-11-02
  • 3 回答
  • 0 关注
  • 489 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信