Tôi đang cố gắng lấy tổng tích lũy của một biến (v) cho các nhóm ("a" và "b") trong một khung dữ liệu. Làm thế nào tôi có thể nhận được kết quả ở dưới cùng - có hàng thậm chí được đánh số đúng - vào cột cs của khung dữ liệu của tôi?Áp dụng chức năng cho các nhóm trong một data.frame trong R
> library(nlme)
> g <- factor(c("a","b","a","b","a","b","a","b","a","b","a","b"))
> v <- c(1,4,1,4,1,4,2,8,2,8,2,8)
> cs <- rep(0,12)
> d <- data.frame(g,v,cs)
> d
g v cs
1 a 1 0
2 b 4 0
3 a 1 0
4 b 4 0
5 a 1 0
6 b 4 0
7 a 2 0
8 b 8 0
9 a 2 0
10 b 8 0
11 a 2 0
12 b 8 0
> r=gapply(d,FUN="cumsum",form=~g, which="v")
>r
$a
v
1 1
3 2
5 3
7 5
9 7
11 9
$b
v
2 4
4 8
6 12
8 20
10 28
12 36
> str(r)
List of 2
$ a:'data.frame': 6 obs. of 1 variable:
..$ v: num [1:6] 1 2 3 5 7 9
$ b:'data.frame': 6 obs. of 1 variable:
..$ v: num [1:6] 4 8 12 20 28 36
Tôi đoán tôi có thể tìm ra một số cách mất thời gian để lấy dữ liệu từ các khung dữ liệu đó vào d $ cs, nhưng cần phải có một số chỉnh sửa dễ dàng.
Tôi luôn quên về 'ave'; mặc dù là như nhau đi như 2 khác? –
@TylerRinker: về cơ bản nó giống như giải pháp của Martin (xem bản chỉnh sửa của tôi). –
Tôi đã nhầm lẫn b/c tôi so với joran's. Tôi quên plyr sắp xếp lại mọi thứ. +1 –