1
我有data.table
,我需要添加額外的列,即對於相同的cID,標籤== 1和標籤== 2之間的比率。我有可以做到這一點的代碼,但結果是根據唯一的「l」的數量減少的形式。但我需要一個完整的重複列表。有什麼建議麼?提前致謝!計算data.table中具有特定標籤的值的比率
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
YEAH!謝謝!它可以處理未分類的數據嗎? –
它不使用數據的順序。它只是一個總和的比例。 –
@JohnAmraph如果你的意思是,如果這些羣體不在一起而是混亂起來,它仍然會工作嗎?是。在這種情況下,您可以將每個組複製到一個連續的塊中,例如運行「sum」或依賴於順序的'cumsum',然後將結果放回原來組中的行。如果這是有道理的。 –