【发布时间】:2021-03-09 02:18:57
【问题描述】:
我有一个包含犯罪实例的数据集,每个实例都有一个位置 (wardId)、犯罪类型 (Primary.Type) 和日期。最终目标是将其变成以 Primary.Type 为节点的网络,其边的权重取决于它们共享 Primary.Type 和 Ward.Date 的独特组合的次数(发生在当天同一个病房是一个连接,这个组合当天发生的次数决定权重)。
在Ward.Date上合并后,wardId和Date我有一个edgelist包含Ward.Date('wardId yyyy-mm-dd')、Primary.Type.x('string')、Primary.Type.y('string '),重量(数字)。 Primary.Types 是通过合并重复表以创建边缘列表而得出的,因此存在反向重复。
| Ward.Date | Primary.Type.x | Primary.Type.y | Weight |
|---|---|---|---|
| 1 2017-01-03 | Theft | Robbery | 1 |
| 1 2017-01-03 | Robbery | Theft | 1 |
| 2 2017-01-05 | Battery | Burglary | 2 |
| 2 2017-01-05 | Burglary | Battery | 2 |
在一些帮助 (Deleting reversed duplicates with R) 的帮助下,我设法删除了具有相同值 Ward.Date 的 Primary.Type.x 和 Primary.Type.y 的反向重复值:
test <- edgelist.primary.wards[!duplicated(lapply(as.data.frame(t(edgelist.primary.wards),
stringsAsFactors=FALSE), sort)),]
但需要注意的是,结果表也删除了反向对的权重,而此计数未汇总到保留对的权重中:
| Ward.Date | Primary.Type.x | Primary.Type.y | Weight |
|---|---|---|---|
| 1 2017-01-03 | Theft | Robbery | 1 |
| 2 2017-01-05 | Burglary | Battery | 2 |
相反,目标输出应该是:
| Ward.Date | Primary.Type.x | Primary.Type.y | Weight |
|---|---|---|---|
| 1 2017-01-03 | Theft | Robbery | 2 |
| 2 2017-01-05 | Burglary | Battery | 4 |
期待看到您的建议!
【问题讨论】:
标签: r string dataframe lapply inverse-match