在下面的data.table
中,我有關於參與項目的團隊組成的信息。變量id
告訴團隊ID,而變量event
給出項目編號。變量freqrel
描述了團隊的組成(您可以看到freqrel在每個團隊中的總和爲1)。嵌套分組與data.table
structure(list(id = c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L,
4L, 4L, 5L, 5L, 5L), event = c("127b", "127b", "127b", "127b",
"127b", "127b", "127b", "127b", "127b", "125t", "125t", "125t",
"125t", "125t", "125t"), membr = c("engineer", "mathematician",
"physicist", "mathematician", "physicist", "surgeon", "dentist",
"mathematician", "programmer", "physicist", "sociologist", "surgeon",
"musician", "sociologist", "surgeon"), freqrel = c(0.4, 0.4,
0.2, 0.166666666666667, 0.5, 0.333333333333333, 0.333333333333333,
0.5, 0.166666666666667, 0.75, 0.125, 0.125, 0.444444444444444,
0.444444444444444, 0.111111111111111)), .Names = c("id", "event",
"membr", "freqrel"), row.names = c(NA, -15L), class = c("data.table",
"data.frame"), sorted = c("id", "event"), .internal.selfref = <pointer: 0x039a24a0>)
我看到數據的方式被拆分成嵌套組。第一部分發生在項目層面(直線),第二部分發生在團隊層面(虛線)。
id event membr freqrel
1: 1 127b engineer 0.4000000
2: 1 127b mathematician 0.4000000
3: 1 127b physicist 0.2000000
--------------------------------------
4: 2 127b mathematician 0.1666667
5: 2 127b physicist 0.5000000
6: 2 127b surgeon 0.3333333
--------------------------------------
7: 3 127b dentist 0.3333333
8: 3 127b mathematician 0.5000000
9: 3 127b programmer 0.1666667
_____________________________________
10: 4 125t physicist 0.7500000
11: 4 125t sociologist 0.1250000
12: 4 125t surgeon 0.1250000
--------------------------------------
13: 5 125t musician 0.4444444
14: 5 125t sociologist 0.4444444
15: 5 125t surgeon 0.1111111
從我想加入到他們每個人的membr
類型的球隊沒有特色的同時,賦予它們freqrel = 0,使內同一個項目完全可比球隊本起始條件。結果應該是這樣的:
id event membr freqrel
1: 1 127b dentist 0.0000000
2: 1 127b engineer 0.4000000
3: 1 127b mathematician 0.4000000
4: 1 127b physicist 0.2000000
5: 1 127b programmer 0.0000000
6: 1 127b surgeon 0.0000000
--------------------------------------
7: 2 127b dentist 0.0000000
8: 2 127b engineer 0.0000000
9: 2 127b mathematician 0.1666667
10: 2 127b physicist 0.5000000
11: 2 127b programmer 0.0000000
12: 2 127b surgeon 0.3333333
--------------------------------------
13: 3 127b dentist 0.3333333
14: 3 127b engineer 0.0000000
15: 3 127b mathematician 0.5000000
16: 3 127b physicist 0.0000000
17: 3 127b programmer 0.1666667
18: 3 127b surgeon 0.0000000
_____________________________________
19: 4 125t musician 0.0000000
20: 4 125t physicist 0.7500000
21: 4 125t sociologist 0.1250000
22: 4 125t surgeon 0.1250000
--------------------------------------
23: 5 125t musician 0.4444444
24: 5 125t physicist 0.0000000
25: 5 125t sociologist 0.4444444
26: 5 125t surgeon 0.1111111
換言之,將數據使用event
作爲密鑰by
後,我需要劃分的第二時間,並比較與所述第二分束而獲得的數據的塊。 但這裏的問題是,我不知道如何引用與by
獲得的第一塊,然後再次如何拆分,並在數據庫之間進行比較。你有什麼想法我可以解決這個問題嗎?
如果你能幫助我,我將非常感激。真。
我非常感謝。我會研究你的解決方案以完全理解它。非常感謝。 – Riccardo
它幫了很多。這是一個很好的解決方案,我很高興我問了這個問題,因爲你的回答讓我意識到我永遠不會獨自一人。非常感謝。編碼風格的一個很好的教訓。 – Riccardo
@Arun @Riccardo:我看到這已經超過了一個月的時間,但我認爲這可能很重要。首先,'.SD [CJ()]'部分的工作原理只是因爲'nomatch = NA'默認情況下。第二,在**'.SD'中使用**的方式,'unique()'只包含'id'的值,和'membr',在**之後發現**數據表已經按照by =而不是整個數據表中的子集。這可能是這裏的預期行爲(每個「事件」有不同的'membr'集合),但可能不是。 – Peter