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

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

在一次調(diào)用中按組對多個變量應(yīng)用多個匯總函數(shù)

在一次調(diào)用中按組對多個變量應(yīng)用多個匯總函數(shù)

慕尼黑8549860 2019-06-20 17:30:04
在一次調(diào)用中按組對多個變量應(yīng)用多個匯總函數(shù)我有以下數(shù)據(jù)框架x <- read.table(text = "  id1 id2 val1 val2 1   a   x    1    9 2   a   x    2    4 3   a   y    3    5 4   a   y    4    9 5   b   x    1    7 6   b   y    4    4 7   b   x    3    9 8   b   y    2    8", header = TRUE)我要計算按Id1和id2分組的val1和val2的平均值,同時計算每個Id1-id2組合的行數(shù)。我可以分別執(zhí)行每一項計算:# calculate meanaggregate(. ~ id1 + id2, data = x, FUN = mean)# count rowsaggregate(. ~ id1 + id2, data = x, FUN = length)為了在一次調(diào)用中進行兩次計算,我嘗試了do.call("rbind", aggregate(. ~ id1 + id2, data = x, FUN = function(x) data.frame(m = mean(x), n = length(x))))但是,我得到了一個錯誤的輸出以及一個警告:#     m   n# id1 1   2# id2 1   1#     1.5 2#     2   2#     3.5 2#     3   2#     6.5 2#     8   2#     7   2#      6   2# Warning message:#   In rbind(id1 = c(1L, 2L, 1L, 2L), id2 = c(1L, 1L, 2L, 2L), val1 = list( :#      number of columns of result is not a multiple of vector length (arg 1)我可以使用plyr包,但是當數(shù)據(jù)集的大小增加時,我的數(shù)據(jù)集非常大,而且plyr非常慢(幾乎無法使用)。我怎么用aggregate還是其他函數(shù)在一次調(diào)用中執(zhí)行多個計算?
查看完整描述

3 回答

?
波斯汪

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

鑒于這一點,在問題中:


我可以使用plyr包,但是當數(shù)據(jù)集的大小增加時,我的數(shù)據(jù)集非常大,而且plyr非常慢(幾乎無法使用)。


然后進去data.table (1.9.4+)你可以嘗試:


> DT

   id1 id2 val1 val2

1:   a   x    1    9

2:   a   x    2    4

3:   a   y    3    5

4:   a   y    4    9

5:   b   x    1    7

6:   b   y    4    4

7:   b   x    3    9

8:   b   y    2    8


> DT[ , .(mean(val1), mean(val2), .N), by = .(id1, id2)]   # simplest

   id1 id2  V1  V2 N

1:   a   x 1.5 6.5 2

2:   a   y 3.5 7.0 2

3:   b   x 2.0 8.0 2

4:   b   y 3.0 6.0 2


> DT[ , .(val1.m = mean(val1), val2.m = mean(val2), count = .N), by = .(id1, id2)]  # named

   id1 id2 val1.m val2.m count

1:   a   x    1.5    6.5     2

2:   a   y    3.5    7.0     2

3:   b   x    2.0    8.0     2

4:   b   y    3.0    6.0     2


> DT[ , c(lapply(.SD, mean), count = .N), by = .(id1, id2)]   # mean over all columns

   id1 id2 val1 val2 count

1:   a   x  1.5  6.5     2

2:   a   y  3.5  7.0     2

3:   b   x  2.0  8.0     2

4:   b   y  3.0  6.0     2

時間比較aggregate(使用于有關(guān)問題及所有其他3項答案)data.table看見這個基準()agg和agg.x案件)。


查看完整回答
反對 回復(fù) 2019-06-20
?
回首憶惘然

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


您可以添加一個count列,用sum,然后縮小以獲得mean:


x$count <- 1

agg <- aggregate(. ~ id1 + id2, data = x,FUN = sum)

agg

#   id1 id2 val1 val2 count

# 1   a   x    3   13     2

# 2   b   x    4   16     2

# 3   a   y    7   14     2

# 4   b   y    6   12     2


agg[c("val1", "val2")] <- agg[c("val1", "val2")] / agg$count

agg

#   id1 id2 val1 val2 count

# 1   a   x  1.5  6.5     2

# 2   b   x  2.0  8.0     2

# 3   a   y  3.5  7.0     2

# 4   b   y  3.0  6.0     2

它的優(yōu)點是保留列名并創(chuàng)建一個count列。


查看完整回答
反對 回復(fù) 2019-06-20
  • 3 回答
  • 0 關(guān)注
  • 631 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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