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案件)。

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列。
- 3 回答
- 0 關(guān)注
- 631 瀏覽
添加回答
舉報