寻找一种方法来确定 R 中某条(非线性)线上方有多少点
Looking for a way to determine how many points are above a certain (nonlinear) line in R
我有一个大数据框 (df),其中包含 x/y 坐标和位于中间某处的非线性回归线,请参见下图。许多点重叠,这就是为什么我有一个额外的列 $Freq.
我正在寻找一种方法来确定这条线上方有多少点(许多点相互重叠)。请参阅下面的 df 结构。
head(df)
x y Freq
0 0 396
1 1 222
1 0 513
2 0 315
2 1 279
2 2 36
...
我知道 Whosebug 上的多边形方法,但我似乎无法使用这些方法,部分原因可能是我的线是一系列坐标而不是公式:
head(line)
x y
0 0.0000
1 0.4220
2 0.8350
3 1.2545
4 1.6615
5 2.0450
最后,如果我能有三个数字就好了:一个描述了线上方点的数量,线下方点的数量,可能还有它右边的点数特定行。
谢谢!
这里有很多未知数,不过
df=merge(df,line,by="x",suffixes=c("_df","_line"))
sum(df$Freq[df$y_df>df$y_line])
[1] 537
library(tidyverse)
data <- tibble::tribble(
~x, ~y, ~Freq,
0, 0, 396,
1, 1, 222,
1, 0, 513,
2, 0, 315,
2, 1, 279,
2, 2, 36
)
data
#> # A tibble: 6 x 3
#> x y Freq
#> <dbl> <dbl> <dbl>
#> 1 0 0 396
#> 2 1 1 222
#> 3 1 0 513
#> 4 2 0 315
#> 5 2 1 279
#> 6 2 2 36
line <- tibble::tribble(
~x, ~y,
0, 0.0000,
1, 0.4220,
2, 0.8350,
3, 1.2545,
4, 1.6615,
5, 2.0450
)
line
#> # A tibble: 6 x 2
#> x y
#> <dbl> <dbl>
#> 1 0 0
#> 2 1 0.422
#> 3 2 0.835
#> 4 3 1.25
#> 5 4 1.66
#> 6 5 2.04
data %>%
left_join(line %>% rename(line_y = y)) %>%
filter(y > line_y)
#> Joining, by = "x"
#> # A tibble: 3 x 4
#> x y Freq line_y
#> <dbl> <dbl> <dbl> <dbl>
#> 1 1 1 222 0.422
#> 2 2 1 279 0.835
#> 3 2 2 36 0.835
data %>%
left_join(line %>% rename(line_y = y)) %>%
filter(y > line_y) %>%
summarise(sum(Freq))
#> Joining, by = "x"
#> # A tibble: 1 x 1
#> `sum(Freq)`
#> <dbl>
#> 1 537
data %>%
left_join(line %>% rename(line_y = y)) %>%
filter(y > line_y) %>%
nrow()
#> Joining, by = "x"
#> [1] 3
由 reprex package (v2.0.1)
于 2021-11-09 创建
我有一个大数据框 (df),其中包含 x/y 坐标和位于中间某处的非线性回归线,请参见下图。许多点重叠,这就是为什么我有一个额外的列 $Freq.
我正在寻找一种方法来确定这条线上方有多少点(许多点相互重叠)。请参阅下面的 df 结构。
head(df)
x y Freq
0 0 396
1 1 222
1 0 513
2 0 315
2 1 279
2 2 36
...
我知道 Whosebug 上的多边形方法,但我似乎无法使用这些方法,部分原因可能是我的线是一系列坐标而不是公式:
head(line)
x y
0 0.0000
1 0.4220
2 0.8350
3 1.2545
4 1.6615
5 2.0450
最后,如果我能有三个数字就好了:一个描述了线上方点的数量,线下方点的数量,可能还有它右边的点数特定行。
谢谢!
这里有很多未知数,不过
df=merge(df,line,by="x",suffixes=c("_df","_line"))
sum(df$Freq[df$y_df>df$y_line])
[1] 537
library(tidyverse)
data <- tibble::tribble(
~x, ~y, ~Freq,
0, 0, 396,
1, 1, 222,
1, 0, 513,
2, 0, 315,
2, 1, 279,
2, 2, 36
)
data
#> # A tibble: 6 x 3
#> x y Freq
#> <dbl> <dbl> <dbl>
#> 1 0 0 396
#> 2 1 1 222
#> 3 1 0 513
#> 4 2 0 315
#> 5 2 1 279
#> 6 2 2 36
line <- tibble::tribble(
~x, ~y,
0, 0.0000,
1, 0.4220,
2, 0.8350,
3, 1.2545,
4, 1.6615,
5, 2.0450
)
line
#> # A tibble: 6 x 2
#> x y
#> <dbl> <dbl>
#> 1 0 0
#> 2 1 0.422
#> 3 2 0.835
#> 4 3 1.25
#> 5 4 1.66
#> 6 5 2.04
data %>%
left_join(line %>% rename(line_y = y)) %>%
filter(y > line_y)
#> Joining, by = "x"
#> # A tibble: 3 x 4
#> x y Freq line_y
#> <dbl> <dbl> <dbl> <dbl>
#> 1 1 1 222 0.422
#> 2 2 1 279 0.835
#> 3 2 2 36 0.835
data %>%
left_join(line %>% rename(line_y = y)) %>%
filter(y > line_y) %>%
summarise(sum(Freq))
#> Joining, by = "x"
#> # A tibble: 1 x 1
#> `sum(Freq)`
#> <dbl>
#> 1 537
data %>%
left_join(line %>% rename(line_y = y)) %>%
filter(y > line_y) %>%
nrow()
#> Joining, by = "x"
#> [1] 3
由 reprex package (v2.0.1)
于 2021-11-09 创建