заполнить область между двумя строками разными значениями x - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть фрейм данных с двумя столбцами х и у. Каждая строка представляет строку, а в каждой ячейке - список с 51 последовательным наблюдением (таким образом, 2 списка в каждой строке для x и y).

Я хочу заполнить пространство между строками во фрейме данных.

Проблема в том, что в x и y есть случайность, поэтому я не могу просто взять ymin и ymax для каждой точки данных на x.

Этот код создает образцы данных (только с 2 строками по 10 наблюдений в каждой), которые похожи на мой фактический набор данных:

library(data.table)

genData <- function() {
  set.seed(42)
  genOneLine <- function(m_x, m_y) {
    xs = seq(0,1,by=0.1)
    x_ran <- rnorm(8, m_x, 0.1)
    xs[2:9] = xs[2:9] + x_ran
    ys = seq(0,1,by=0.1)
    y_ran <- rnorm(8, m_y, 0.1)
    ys[2:9] = ys[2:9] + y_ran
    return (data.table(x = list(xs), y = list(ys)))
  }
  return (rbind(genOneLine(-0.1, -0.1), genOneLine(0.1, 0.1)))
}

1 Ответ

0 голосов
/ 18 марта 2019

Посмотрите, имеете ли вы это в виду?

library(dplyr)
library(ggplot2)
library(data.table)

df <- genData()

df %>%

  # add identifier variable to each line
  mutate(id = seq(1, n())) %>%

  # make each element of the list its own row
  tidyr::unnest() %>%

  # add sequence identifier, from start of line 1 to its end, then
  # from the end of line 2 to its start
  group_by(id) %>%
  mutate(order = ifelse(id == 1, seq(1, n()), n() + seq(n(), 1))) %>%
  ungroup() %>%

  # sort data frame
  arrange(order) %>%

  # plot
  ggplot(aes(x = x, y = y)) +
  geom_polygon(aes(group = 1), fill = "grey20", alpha = 0.5) +
  geom_path(aes(color = factor(id)), size = 2)

result

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...