データフレーム(データテーブル)の上記N + 1行をグループごとに合計する関数が必要です。(カスタム関数を使用して)グループ単位でデータテーブル(データフレーム)のN行を合計する
ベクトルの同等の機能は、以下のようになります。
Function1<-function(x,N){
y<-vector(length=length(x))
for (i in 1:length(x))
if (i<=N)
y[i]<-sum(x[1:i])
else if (i>N)
y[i]<-sum(x[(i-N):i])
return(y)}
Function1(c(1,2,3,4,5,6),3)
#[1] 1 3 6 10 14 18 # Sums previous (above) 4 values (rows)
を(下の機能が非効率的である場合はご容赦ください)私は
sapply(X=DF<-data.frame(A=c(1:10), B=2), FUN=Function1(N=3))
...以下のように、sapplyでこの機能を使用していたけど..私は把握できなかったことができなかったので、私の関数でxのデフォルトを設定する方法。したがって、私はdata.framesのための別の関数を構築しました。
Function2<-function(x, N)
if(is.data.frame(x)) {
y<-data.frame()
for(j in 1:ncol(x))
for(i in 1:nrow(x))
if (i<=N) {
y[i,j]<-sum(x[1:i,j])
} else if (i>N) {
y[i,j]<-sum(x[(i-N):i,j])}
return(y)}
DF<-data.frame(A=c(1:10), B=2)
Function2(DF, 2)
# V1 V2
1 1 2
2 3 4
3 6 6
4 9 6
5 12 6
6 15 6
7 18 6
8 21 6
9 24 6
10 27 6
ただし、これをグループ単位で実行する必要があります。たとえば、文字列を含む次のデータフレームの場合。
DF<-data.frame(Name=rep(c("A","B"),each=5), A=c(1:10), B=2)
私は「名前」グループで、私の関数を適用したいと思います - につながるどの
A 1 2
A 3 4
A 6 6
A 9 6
A 12 6
B 6 2
B 13 4
B 21 6
B 24 6
B 27 6
#Perform function2 separately for group A and B.
私は(=グループによる)data.tableパッケージに機能を使用することを期待していました。しかし、どのように把握できませんでした。
これを行うにはどうすればよいでしょうか? 「名前」によるdata.table
で (私は私の機能1がsapplyで動作するようにする方法を学ぶことができればまた、それは、本当にいいだろう)