大家晚上好,
我正在尝试根据它们在 3 列上的值对数据进行分组。我想对 X、Y 和 Z 坐标彼此相差小于 12% 的行进行分组。换句话说,对于每个观察值,我想检查它们的 X、Y 和 Z 值是否与表中的另一个观察值的差异小于 12%。我的数据框看起来或多或少是这样的:
ID | X | 是 | Z | |
---|---|---|---|---|
1 | 33 | 3 | 1 | |
2 | 27 | 42 | 1 | |
3 | 32 | 3 | 58 | |
4 | 33 | 3 | 1 | |
5 | 25 | 2 | 22 | |
6 | 37 | 119 | 3 |
ID 1 和 4 应属于同一组,因为它们的 X、Y 和 Z 坐标之间的差异小于 12%。我正在考虑遍历整个数据框(遍历 x 以查找相似的行,然后通过 Y 查找相似的行,最后通过 Z,然后检查是否会通过 X、Y 和 Z 出现某些结果,但它非常复杂并且似乎效果不佳。我也尝试以这种方式手动对它们进行分组:
df %>% group_by(IDscrit) %>% summarize(n())
df$group <- ifelse(df$X <2 & df$Y <2 & df$Z <2, "group1",
ifelse(df$X <5 & df$X >2 & df$Y <5 &df$Y >2 & df$Z <5 & df$Z >2, "group2", NA))
但是由于非常明显的原因(不方便,我排除了许多任意分组的值,尽管它们可能彼此接近,例如,如果我的表显示这些值:
ID | X | 是 | Z |
---|---|---|---|
14 | 4 | 3 | 1 |
26 | 6 | 3 | 2 |
他们不会被分组,虽然他们应该),因此这也行不通......我会非常感谢任何建议,真的......这远远超出了我的编码能力,我什至不知道哪个部分我应该再选择这个问题。