請在這裏找到一個長data.table一個非常小的子集,我與跨多個列應用功能
dput(dt)
structure(list(id = 1:15, pnum = c(4298390L, 4298390L, 4298390L,
4298558L, 4298558L, 4298559L, 4298559L, 4299026L, 4299026L, 4299026L,
4299026L, 4300436L, 4300436L, 4303566L, 4303566L), invid = c(15L,
101L, 102L, 103L, 104L, 103L, 104L, 106L, 107L, 108L, 109L, 87L,
111L, 2L, 60L), fid = structure(c(1L, 1L, 1L, 2L, 2L, 2L, 2L,
4L, 4L, 4L, 4L, 3L, 3L, 2L, 2L), .Label = c("CORN", "DowCor",
"KIM", "Texas"), class = "factor"), dom_kn = c(1L, 0L, 0L, 0L,
1L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 1L), prim_kn = c(1L,
0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L), pat_kn = c(1L,
0L, 0L, 0L, 1L, 0L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L), net_kn = c(1L,
0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 1L), age_kn = c(1L,
0L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 1L, 0L, 1L, 0L), legclaims = c(5L,
0L, 0L, 2L, 5L, 2L, 5L, 0L, 0L, 0L, 0L, 5L, 0L, 5L, 2L), n_inv = c(3L,
3L, 3L, 2L, 2L, 2L, 2L, 4L, 4L, 4L, 4L, 2L, 2L, 2L, 2L)), .Names = c("id",
"pnum", "invid", "fid", "dom_kn", "prim_kn", "pat_kn", "net_kn",
"age_kn", "legclaims", "n_inv"), class = "data.frame", row.names = c(NA,
-15L))
我找比在5分不同的列比較申請一個扭捏更大的工作。
在每個pnum
(專利)中,存在多個invid
(發明人)。我想將每行的dom_kn
,prim_kn
,pat_kn
,net_kn
和age_kn
列的值與具有相同pnum
的其他行中的值進行比較。比較僅僅是>
,如果該值確實比另一個大,則應該歸因於一個「點」。
所以對於第一行pnum == 4298390
和invid == 15
,你可以看到在五列的值都爲1
,而invid == 101 | 102
值都爲零。這意味着如果我們單獨比較(大於?)第一行中的每個值到第二和第三行中的每個單元格,則總和將是10個點。在每一個比較中,第一行的值都比較大,有10個比較。 比較的數量是由設計5 * (n_inv -1)
。 我正在尋找第1行的結果應該是10/10 = 1
。
對於pnum == 4298558
列net_kn
和age_kn
都具有在兩行中的值1(用於invid
103和104),使得每個應該得到0.5分(如果將有三位發明者具有值1,每個人都應該得到0.33分)。 pnum == 4298558
也是如此。
對於下一個pnum == 4299026
所有的值都是零,所以每個比較應該得到0分。
因此注意區別:有三種不同的二元對比
1 > 0 --> assign 1
1 = 1 --> assign 1/number of positive values in column subset
0 = 0 --> assign 0
期望的結果 一個額外的列result
在data.table與價值1 0 0 0.2 0.8 0.2 0.8 0 0 0 0 1 0 0.8 0.2
如何計算這個任何建議有效率的?
謝謝!
有些東西對我來說不是很清楚,因爲'pnum == 4298558',net_kn和age_kn都有1,所以根據你的描述,沒有人比另一個大,他們應該得到0。爲什麼不是這樣? – adaien
說明可能不清楚。它們都具有值1並且需要與也具有值1的下一行進行比較。如果它們相等並且爲1,則它們應該在專利 – SJDS
的列中獲得值1 /正值的數量「比較僅僅是>如果這個值確實比另一個大,那麼應該把一個「點」歸因於「。他們是平等的,所以他們得到0,他們爲什麼得到1? – adaien