r - 计算介于其他两个列值(范围)之间的列值
问题描述
我有两个数据框(Droplets 和 Nucleus),其中包含来自图像中数千个对象的数据,如下所示:
head(Droplets)
class_name object_id centroid_y centroid_x
<chr> <dbl> <dbl> <dbl>
1 Droplet 1 47 621
2 Droplet 2 173 106
3 Droplet 3 158 949
4 Droplet 4 176 627
5 Droplet 5 619 154
6 Droplet 6 631 1361
head(Nucleus)
class_name object_id area bbox_y_start bbox_x_start bbox_y_end bbox_x_end
<chr> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Nucleus 1 8973 0 95 102 213
2 Nucleus 2 1592 0 189 36 257
3 Nucleus 3 2980 0 256 43 348
4 Nucleus 4 4664 0 404 93 490
5 Nucleus 5 3973 0 486 79 560
6 Nucleus 6 737 0 564 16 635
液滴是核内的点。所有液滴都在核内,但一个核也可能有 0 个液滴。我正在尝试找出一种方法来根据它们的位置计算 Nucleus 中有多少液滴。我相信 Droplet 是一个点,而 Nucleus 可能是多边形。我读到了point.in.polygon。我还尝试查看 centroid_y 和 centroid_x 是否都在 bbox 的范围内。但我不是 R 忍者,我不知道如何开始。所需的输出将是这样的:
class_name object_id Droplets_count
1 Nucleus 1 1
2 Nucleus 2 2
3 Nucleus 3 3
4 Nucleus 4 0
5 Nucleus 5 0
6 Nucleus 6 1
有什么简单的方法吗?谢谢!
解决方案
data.table
方法
library(data.table)
# convert to data.table format using
# setDT(Droplets); setDT(Nucleus)
# Perform non-equi left join
ans <- Droplets[Nucleus, on = .(centroid_y >= bbox_y_start,
centroid_y <= bbox_y_end,
centroid_x >= bbox_x_start,
centroid_x <= bbox_x_end)][]
# summarise
ans[, .(Droplets_count = uniqueN(object_id, na.rm = TRUE)),
by = .(Nucleus_id = i.object_id)]
Nucleus_id Droplets_count
1: 1 2
2: 2 0
3: 3 1
4: 4 1
5: 5 0
6: 6 2
使用的样本数据
library(data.table)
Droplets <- fread("class_name object_id centroid_y centroid_x
Droplet 1 21 152
Droplet 2 6 126
Droplet 3 36 301
Droplet 4 66 426
Droplet 5 8 599
Droplet 6 12 602")
Nucleus <- fread("class_name object_id area bbox_y_start bbox_x_start bbox_y_end bbox_x_end
Nucleus 1 8973 0 95 102 213
Nucleus 2 1592 0 189 36 257
Nucleus 3 2980 0 256 43 348
Nucleus 4 4664 0 404 93 490
Nucleus 5 3973 0 486 79 560
Nucleus 6 737 0 564 16 635")
推荐阅读
- python - 使用 Python 和 winreg 在 Windows 10 上设置代理
- google-chrome - Chrome 扩展程序:从弹出窗口访问数据
- java - 使用 Hashmap 检测列表中的重复项和重复项计数
- python - 如何使用 Telethon 运行多个会话?
- python - 边界附近有更多点的非均匀间隔的 np.array
- java - 如何检查远程存储库中是否存在依赖项?
- python - 为什么我的第二个数据库列填充了“无”?
- sqlite - 在 Delphi 10.3 Community Edition 中使用 SQLite 的最佳和简单方法是什么?
- android - iOS 模拟器或物理设备未收到 FCM 数据消息
- android - Android房间数据库错误不确定如何在房间android中将游标转换为此方法的返回类型