Проблема с использованием base-R `rep ()` с dplyr - PullRequest
0 голосов
/ 31 октября 2018
library(tidyverse)
x <- c(0, 20, 30, 58)
n <- 100
df <- data_frame(x, n) %>% 
  distinct() %>%
  filter(x >= 0 & x < n) %>%
  arrange(x) %>%
  bind_rows(data_frame(x = n)) %>%
  mutate(lag_x = lag(x)) %>%
  mutate(y = x - lag_x) %>%
  filter(!is.na(y))

rep(seq_along(df$x), df$y)

Код выше работает нормально. Когда я пытаюсь сделать последний шаг трубы во все это ломается. Что выключено в моем синтаксисе? Я хочу, чтобы все было одной длинной трубкой. Я думаю, что это невозможно, потому что мне нужно, чтобы весь мой канал (фрагмент кода выше) был вложен в мой rep() вызов? Это правильно?

library(tidyverse)
x <- c(0, 20, 30, 58)
n <- 100
df <- data_frame(x, n) %>% 
  distinct() %>%
  filter(x >= 0 & x < n) %>%
  arrange(x) %>%
  bind_rows(data_frame(x = n)) %>%
  mutate(lag_x = lag(x)) %>%
  mutate(y = x - lag_x) %>%
  filter(!is.na(y)) %>% 
  rep(seq_along(x), y) %>% 
  print()

Ошибка в function_list [i]: объект 'y' не найден

1 Ответ

0 голосов
/ 31 октября 2018

Поскольку он находится за пределами mutate/summarise функций, нам нужно pull или извлечь его

data_frame(x, n) %>% 
  distinct() %>%
  filter(x >= 0 & x < n) %>%
  arrange(x) %>%
  bind_rows(data_frame(x = n)) %>%
  mutate(lag_x = lag(x)) %>%
  mutate(y = x - lag_x) %>%
  filter(!is.na(y)) %>% 
  {rep(seq_along(.$x), .$y)}

Или это также можно записать как

data_frame(x, n) %>% 
 distinct() %>%
 filter(x >= 0 & x < n) %>%
 arrange(x) %>%
 bind_rows(data_frame(x = n)) %>%
 mutate(lag_x = lag(x)) %>%
 mutate(y = x - lag_x) %>%
 filter(!is.na(y)) %>% 
 summarise(n = list(rep(row_number(), y))) %>%
 pull(n)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...