【发布时间】:2016-03-30 11:01:02
【问题描述】:
请在此处找到我正在使用的长 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
想要的结果
data.table 中有一个额外的列result,其值为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。为什么不是这样? -
描述可能不清楚。它们都具有值 1,需要与下一行也具有值 1 进行比较。如果它们相等且为 1,则它们的值应为 1/专利中列中正值的数量
-
"比较简单>,如果值确实大于另一个,则应归为一个"点"。他们是相等的,所以他们得到 0,为什么他们得到 1?
-
好的,我需要重新构建它。如果在同一列和同一专利中,多个值的值为 1,则分配的值不为零。它需要是 1 除以非零值的数量
-
那些列只会取值 1 或 0?
标签: r data.table