我在CSV得到這個表/數組:R:在陣列重量參數基於其他參數
GroupID Channel Daysbeforelast 1 A 35 1 B 31 1 C 29 1 D 17 1 E 15 1 D 5 1 C 0 2 B 66 2 E 17 2 D 15 2 A 2 2 C 0 2 F 0 2 A 0 4 B 15 4 C 0
,並試圖增加一個列Weight
所以表看起來就像這樣:
GroupID Channel Daysbeforelast Weight How it is calculated 1 A 35 0.00005 (1-x/2/2-x/2-x)/2 1 B 31 0.00005 (1-x/2/2-x/2-x)/2 1 C 29 0.0833 (x/2/2)/3 1 D 17 0.0833 (x/2/2)/3 1 E 15 0.0833 (x/2/2)/3 1 D 5 0.25 (x/2) 1 C 0 0.5 (x) 2 B 66 0.125 (1-x/2/2-x/2-x) 2 E 17 0.0625 (x/2/2)/2 2 D 15 0.0625 (x/2/2)/2 2 A 2 0.25 (x/2) 2 C 0 0.25 (x)/3 2 F 0 0.25 (x)/3 2 A 0 0.5 (x)/3 4 B 15 0.5 (1-x) 4 C 0 0.5 (x)
下面解釋。
每個組可以具有一個或多個亞組取決於數據:
如果Daysbeforelast=0
然後Subgroup1;
If 0<Daysbeforelast<=7
then Subgroup2;
If 7<Daysbeforelast<=14
then Subgroup3;
If 14<Daysbeforelast<=30
then Subgroup4;
Else Subgroup5。第一小組有weight = x
(例如x = 0.5)。此weight
均勻分佈在組中的所有行中。可以說組Y在SubgroupZ中有3行。在這種情況下,每行將有weight equal (SubgroupZ weight)/3
。
子組2具有weight = x/2
,它以相同的方式分佈在該子組中的所有行上。
每個子組直到最後一個人將收到weight
等於先前的羣由2 最後亞組中劃分weight
(並不總是小組5)將獲得該組中的所有先前的權重weight = 1 - sum
。 這是爲了檢查每組的權重總和是否等於1.
請注意,如果我們例如在Subgroup2中沒有任何行,則Subgroup3將收到weight x/2
(而不是x/2/2)。 我們有所有組的Subgroup1,但所有或任何其他子組都可能會丟失。
使用變量lapply也許最簡單的方式,但我得到了它棧我是很新的R.
此外,我想爲R中的重量分佈有可能是專門的庫/函數?
感謝您查看我的問題。
非常感謝@Omley!它工作得很好,這是很好的解決方案。我已更正'如何計算權重'列。 – user912830823