1

data.table同じ cID のラベル == 1 とラベル == 2 の比率である追加の列を追加する必要があります。私はそれを行うことができるコードを持っていますが、結果は一意の「l」の数に応じた縮小形式です。しかし、重複のある完全なリストが必要です。助言がありますか?前もって感謝します!

x   y   l   cID
0.03588851  0.081635056 1   1
0.952514891 0.82677373  1   1
0.722920691 0.687278396 1   1
0.772207687 0.743329599 2   1
0.682710551 0.946685728 1   2
0.795816439 0.024320077 2   2
0.50788885  0.106910923 2   2
0.145871035 0.802771467 2   2
0.092942384 0.335054397 1   3
0.439765866 0.199329139 1   4

再現する

x = c(0.03588851,0.952514891,0.722920691,0.772207687,0.682710551,0.795816439,0.50788885,0.145871035,0.092942384,0.439765866)
y = c(0.081635056,0.82677373,0.687278396,0.743329599,0.946685728,0.024320077,0.106910923,0.802771467,0.335054397,0.199329139)
l = c(1,1,1,2,1,2,2,2,1,1)
cID = c(1,1,1,1,2,2,2,2,3,4)
dt <- data.table(x,y,l,cID)
dt[,sum(l == 1)/sum(l == 2), by = cID]

このような比率の列を取得する必要があります

x   y   l   cID ratio
0.03588851  0.081635056 1   1   3
0.952514891 0.82677373  1   1   3
0.722920691 0.687278396 1   1   3
0.772207687 0.743329599 2   1   3
0.682710551 0.946685728 1   2   0.333333333
0.795816439 0.024320077 2   2   0.333333333
0.50788885  0.106910923 2   2   0.333333333
0.145871035 0.802771467 2   2   0.333333333
0.092942384 0.335054397 1   3   Inf
0.439765866 0.199329139 1   4   Inf
4

1 に答える 1

3

あなたはかなり近かった。これを試して:

dt[, ratio := sum(l == 1) / sum(l == 2), by = cID]
于 2013-08-18T15:01:11.220 に答える