第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

根據(jù)無序的列對聚合數(shù)據(jù)幀

根據(jù)無序的列對聚合數(shù)據(jù)幀

慕哥9229398 2019-11-02 14:35:53
我有一個看起來像這樣的數(shù)據(jù)集:     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是在一個圖形獨特節(jié)點,并且size是分配給一個值涉及連接它們的邊緣從 id1 給 id2。該數(shù)據(jù)集相當(dāng)大(超過200萬行)。我想這樣做是和大小列,按分組無序節(jié)點對的id1和id2。例如,在第一行中,我們有id1=5400和id2=5505。數(shù)據(jù)框中存在另一行,其中id1=5505和id2=5400。在分組的數(shù)據(jù)中,這兩行的size列的總和將添加到單行中。因此,換句話說,我想總結(jié)我要對(id1,id2)的(無序)集合進行分組的數(shù)據(jù)。我找到了一種使用apply使用一個自定義函數(shù)來檢查整個數(shù)據(jù)集中的反向列對,但是這樣做的速度非常慢。有誰知道用另一種方式做這件事的方法,也許plyr在基本軟件包中使用某種方法會更有效?
查看完整描述

3 回答

?
瀟瀟雨雨

TA貢獻1833條經(jīng)驗 獲得超4個贊

一種方法是與創(chuàng)建額外的列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


查看完整回答
反對 回復(fù) 2019-11-02
?
慕后森

TA貢獻1802條經(jīng)驗 獲得超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


查看完整回答
反對 回復(fù) 2019-11-02
?
慕尼黑的夜晚無繁華

TA貢獻1864條經(jīng)驗 獲得超6個贊

我的aggregate{stats}函數(shù)方法:


> 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


查看完整回答
反對 回復(fù) 2019-11-02
  • 3 回答
  • 0 關(guān)注
  • 558 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號