0

data.tableに関するいくつかの質問/提案があります。


R)  X = data.table(x=c("q","q","q","w","w","e"),y=1:6,z=10:15)
R) X[,list(sum(y)),by=list(x)]
   x V1
1: q  6
2: w  9
3: e  6

書かなければならないのはあまりにも悪いと思います

R) X[,list(y=sum(y)),by=list(x)]
   x y
1: q 6
2: w 9
3: e 6

デフォルトでは、関数が 1 つの列のみを呼び出す同じ列名 (つまり、y) を保持する必要があります。これは、ほとんどの場合、通常、加重合計または前回または.. . => この動作をデフォルトに設定できる変数はありますか?


選択を行うとき、いくつかの列で微積分を実行し、他のすべての列に別の操作を適用したい場合があります。私がこれを望むとき、私はあまりにも悪いことを意味します:

R)  X = data.table(x=c("q","q","q","w","w","e"),y=1:6,z=10:15,t=20:25,u=30:35)
R) X
   x y  z  t  u
1: q 1 10 20 30
2: q 2 11 21 31
3: q 3 12 22 32
4: w 4 13 23 33
5: w 5 14 24 34
6: e 6 15 25 35
R) X[,list(y=sum(y),z=last(z),t=last(t),u=last(u)),by=list(x)] #LOOOOOOOOOOONGGGG 
#EXPR
   x y  z  t  u
1: q 6 12 22 32
2: w 9 14 24 34
3: e 6 15 25 35

みたいに書けない…

R) X[,list(sum(y)),by=list(x),defaultFn=last] #defaultFn would be 
applied to all remaniing columns

=>どうにかしてこれを行うことはできますか(オプションを設定している可能性があります)?


ありがとう

4

1 に答える 1

3

パート1では、それは悪い考えではありません。の式についてはすでにそれを行っており、次byのリストにはすでに近いものがありますj

FR#2286推測された命名がj = colname [...]に適用される可能性があります
グループごとの最大値を検索し、別の列を返します

ただし、これを行う場合は、下位互換性を維持するために、オプションを介してオンにする必要があります。そのFRにこの質問へのリンクを追加しました。


第二部ではどうですか:

X[,c(y=sum(y),lapply(.SD,last)[-1]),by=x]
   x y  z  t  u
1: q 6 12 22 32
2: w 9 14 24 34
3: e 6 15 25 35

ただし、複数の質問を別々に行ってください。SOに関する各質問は、単一の質問であると想定されています。

于 2012-12-05T21:06:02.633 に答える