我有一個大資料框 (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
...
我知道 StackOverflow 上的多邊形方法,但我似乎無法讓它們作業,部分原因可能是我的線是一系列坐標而不是公式:
head(line)
x y
0 0.0000
1 0.4220
2 0.8350
3 1.2545
4 1.6615
5 2.0450
最后,如果我能有三個數字就太好了:一個描述線以上點的數量,線下點的數量,可能還有這條特定線右側的點。
謝謝!
uj5u.com熱心網友回復:
然而,這里有很多未知數
df=merge(df,line,by="x",suffixes=c("_df","_line"))
sum(df$Freq[df$y_df>df$y_line])
[1] 537
uj5u.com熱心網友回復:
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 包(v2.0.1)于 2021 年 11 月 9 日創建
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/354149.html
下一篇:對r中的資料執行逐行歸一化
