Разделение точек на равные группы от их среднего - PullRequest
0 голосов
/ 09 апреля 2020

У меня есть такой набор точек, и я пытаюсь сгруппировать или объединить их в четыре группы одинакового размера в зависимости от их среднего значения.

df <- data.frame(x = rnorm(50, 0, 1),
                 y = rnorm(50, -0, 0.7))

ggplot(data = df, aes(x = x, y = y)) +
  geom_point() +
  geom_abline(slope = 0.7, intercept = 0) +
  geom_abline(slope = -0.7, intercept = 0)

enter image description here

В этом случае я бы хотел, чтобы каждой точке присваивалась группа в зависимости от того, как далеко они находятся по отношению к среднему (здесь это будет (0,0)), и будет ли это расстояние больше вверх, вниз, влево или вправо. Спасибо за помощь.

1 Ответ

1 голос
/ 10 апреля 2020

df <- data.frame(x = rnorm(50, 0, 1),
                 y = rnorm(50, -0, 0.7),
                 center = rep(0,50))  # not really needed 
df$v1 <- -df$x^2     # vector one 0(center) - df$x2
df$v2 <- -df$y^2     # vector two 0(center) - df$y2
df$dist = df$v1 + df$v2  
df$len = sqrt(abs(df$dist)) #lenght of vector betwen center and point
df$group = cut(df$len, 10,labels = paste("Level",LETTERS[1:10])) # grouping into 10 bins

df<-df %>% mutate(posit= case_when(x < mean(x) & y < mean(y) ~ "A", 
                              x > mean(x) & y  > mean(y) ~ "B",
                              x <mean(x) & y  >mean(y) ~ "C",
                              x >mean(x) & y  <  mean(y) ~ "D"))             

ggplot(data = df ) +
  geom_point(aes(x = x, y = y,col= group, shape= posit, size=2)) +
  geom_vline(xintercept =mean(df$x))+
  geom_abline(slope = -0.0, intercept =mean(df$y))

enter image description here

...