gpt4 book ai didi

R:找出每组直线上有多少个点

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:39:33 25 4
gpt4 key购买 nike

我正在努力寻找解决问题的办法:

每组有多少点在直线上

我在 R 中找不到解决这个问题的方法...

下面你有一个样本数据和绘图只是为了向你展示它的样子:

data <- structure(list(Group = c(22782L, 22782L, 22782L, 22782L, 22782L, 
22782L, 22782L, 22782L, 22782L, 22782L, 22782L, 22782L, 22782L,
22782L, 22782L, 22782L, 22782L, 22782L, 22782L, 22782L, 22782L,
22782L, 22782L, 22782L, 22782L, 22782L, 22782L, 22782L, 22782L,
22782L, 22782L, 22782L, 22782L, 22782L, 22782L, 22782L, 22782L,
22782L, 22782L, 22782L, 22782L, 22782L, 22782L, 22782L, 22782L,
22782L, 11553L, 11553L, 11553L, 11553L, 11553L, 7059L, 7059L,
7059L, 7059L, 22782L), x = c(100L, 150L, 250L, 287L, 312L, 387L,
475L, 550L, 837L, 937L, 987L, 1087L, 1175L, 1300L, 1325L, 1487L,
1662L, 1700L, 1725L, 1812L, 1912L, 2412L, 3012L, 3562L, 4162L,
4762L, 5362L, 5750L, 5712L, 6225L, 6825L, 6887L, 7237L, 7850L,
7800L, 7937L, 7975L, 8275L, 8362L, 8662L, 8725L, 8950L, 9100L,
9312L, 9400L, 9600L, 4637L, 900L, 4187L, 5800L, 7075L, 1125L,
3400L, 3562L, 3462L, 5412L), y = c(493L, 482L, 479L, 476L, 481L,
479L, 474L, 480L, 480L, 491L, 489L, 490L, 485L, 485L, 485L, 479L,
482L, 482L, 482L, 482L, 484L, 489L, 491L, 489L, 496L, 498L, 500L,
0L, 498L, 500L, 502L, 506L, 497L, 0L, 495L, 506L, 497L, 494L,
498L, 500L, 496L, 499L, 496L, 495L, 495L, 498L, 825L, 284L, 850L,
360L, 790L, 861L, 883L, 882L, 881L, 502L)), row.names = c(23L,
24L, 25L, 26L, 27L, 28L, 29L, 30L, 31L, 32L, 33L, 34L, 35L, 36L,
37L, 38L, 39L, 40L, 41L, 42L, 43L, 44L, 45L, 46L, 47L, 48L, 49L,
51L, 52L, 53L, 54L, 55L, 56L, 57L, 58L, 59L, 60L, 61L, 62L, 63L,
64L, 65L, 66L, 67L, 68L, 69L, 281L, 312L, 313L, 315L, 316L, 377L,
378L, 380L, 511L, 815L), class = "data.frame")

数据由组名称列(在本例中为 3 个组)、x 和 y 坐标组成:

 Group   x   y
22782 100 493
22782 150 482
22782 250 479
22782 287 476
22782 312 481

下面我们可以找到组 22782 的图: enter image description here

如您所见,有许多点几乎完全位于同一条线上,我想知道每组中有多少点符合这种情况。

预期输出如下所示:

  Group Max Points  
22782 20

如有任何帮助或提示,我将不胜感激!谢谢

最佳答案

假设您知道只有少数点不在线上。您还提到您只想考虑水平线。

在这种情况下,您可以使用中位数 作为水平线位置的稳健估计。您可以使用 mean,但它可能会受到无论如何都不在直线上的极端值的影响。

代码是不言自明的:

tolerance <- 10

data %>%
group_by(Group) %>%
mutate(y_line = median(y),
on_line = abs(y - y_line) <= tolerance) %>%
count(Group, on_line)

结果:

#   Group on_line     n
# <int> <lgl> <int>
# 1 7059 FALSE 1
# 2 7059 TRUE 3
# 3 11553 FALSE 4
# 4 11553 TRUE 1
# 5 22782 FALSE 13
# 6 22782 TRUE 34

当然,您可以将其通过管道传输到 filter(on_line) 中,以仅保留线上的点数。

关于R:找出每组直线上有多少个点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56473056/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com