我有一个数据表对象:
> dput(head(trackdatacompvar))
structure(list(wellvid = structure(c(1L, 1L, 1L, 1L, 1L, 1L), .Label = c("A4-009",
"B3-006", "B4-015", "C2-009", "C2-034", "C3-017", "C4-014", "C4-016",
"C4-026", "C4-036"), class = "factor"), TRACK_ID = c(0L, 0L,
0L, 0L, 0L, 0L), treatment = structure(c(2L, 2L, 2L, 2L, 2L,
2L), .Label = c("Si_induced", "Si_notinduced"), class = "factor"),
A = c(0L, 0L, 0L, 0L, 0L, 0L), X = c(50.216, 50.216, 50.091,
50.091, 50.216, 50.216), Y = c(295.609, 295.609, 295.477,
295.477, 295.609, 295.609), T = 0:5, V = c(0, 0, 0.181793839279557,
0, 0.181793839279557, 0), x_grpA = c(641.67, 641.67, 641.67,
641.67, 641.67, 641.67), y_grpA = c(625, 625, 625, 625, 625,
625), rad_grpA = c(50L, 50L, 50L, 50L, 50L, 50L), x_grpB = c(889.58,
889.58, 889.58, 889.58, 889.58, 889.58), y_grpB = c(377.08,
377.08, 377.08, 377.08, 377.08, 377.08), rad_grpB = c(20L,
20L, 20L, 20L, 20L, 20L)), .Names = c("wellvid", "TRACK_ID",
"treatment", "A", "X", "Y", "T", "V", "x_grpA", "y_grpA", "rad_grpA",
"x_grpB", "y_grpB", "rad_grpB"), sorted = "wellvid", class = c("data.table",
"data.frame"), row.names = c(NA, -6L), .internal.selfref = <pointer: 0x0000000000210788>)
我想根据圆形区域定义4组数据。 A组和B组将取决于2个珠子的x,y原点(标记为x_grpA,y_grpA和x_grpB,y_grpB),C组是外部区域,D组是A组和B组重叠的区域(但是这个区域)有时不在那里)。 2个圆形组应位于半径为115μm的圆形区域内。这115微米取决于珠子的大小,所以我的数据也有2个半径(rad_grpA和rad_grpB)。为了直观地理解它,这里有两张图片:
我最初的想法是重用我给出的令人敬畏的脚本before。因此,我尝试将每个数据点的中心和组A的整个区域的相应长度定义为:
center_grpA <- c(trackdatacompvar$x_grpA, trackdatacompvar$y_grpA)
circle_grpA <- (trackdatacompvar$rad_grpA)*2 + 115
但在此之后我迷失了。 最后,我想在我的数据帧中将它们的分组作为一个变量。 非常感谢任何帮助!谢谢:))
答案 0 :(得分:1)
我们可以使用我的here包中的一点便利功能:
Q_GLOBAL_STATIC
现在我们检查每个点,是圆圈A,圆圈B,然后是check_if_in_circle <- function(points, x, y, r) {
(points[, 1] - x) ^ 2 + (points[, 2] - y) ^ 2 < r ^ 2
}
,以确定是否分配A,B,C或D.我使用ifelse
来避免输入那个长数据名称。
within
对于你给我们的几行,所有都在C组。