Использование rep в функции карты для увеличения данных - PullRequest
1 голос
/ 10 февраля 2020

У меня есть список, в котором я применяю следующее map к:

modified_list <- map(boundary_lists,
    ~tibble(
      x = seq(.x$minX, .x$maxX, length.out = 200),
      y = seq(.x$minY, .x$maxY, length.out = 200)
    )
)

Я пытаюсь расширить это, добавив следующее:

rep(modified_list[[1]]$x, each = 200)
rep(modified_list[[1]]$y, time = 200)

Я пытался :

map(modified_list, ~mutate(.,
                           xx = rep(.x$x, each = 200),
                           yy = rep(.y$y)
                           )
            )

Что возвращает ошибку. Как я могу добавить rep() к сопоставленному tibble()?

Данные:

    boundary_lists <- list(structure(list(minX = 2, maxX = 3.8, minY = 4.9, maxY = 7.9), row.names = c(NA, 
-1L), class = "data.frame"), structure(list(minX = 3, maxX = 6.9, 
    minY = 4.9, maxY = 7.9), row.names = c(NA, -1L), class = "data.frame"))
> boundary_lists %>% dput()
list(structure(list(minX = 2, maxX = 3.8, minY = 4.9, maxY = 7.9), row.names = c(NA, 
-1L), class = "data.frame"), structure(list(minX = 3, maxX = 6.9, 
    minY = 4.9, maxY = 7.9), row.names = c(NA, -1L), class = "data.frame"), 
    structure(list(minX = 1, maxX = 2.5, minY = 4.9, maxY = 7.9), row.names = c(NA, 
    -1L), class = "data.frame"), structure(list(minX = 4.9, maxX = 7.9, 
        minY = 2, maxY = 3.8), row.names = c(NA, -1L), class = "data.frame"), 
    structure(list(minX = 3, maxX = 6.9, minY = 2, maxY = 3.8), row.names = c(NA, 
    -1L), class = "data.frame"), structure(list(minX = 1, maxX = 2.5, 
        minY = 2, maxY = 3.8), row.names = c(NA, -1L), class = "data.frame"), 
    structure(list(minX = 4.9, maxX = 7.9, minY = 3, maxY = 6.9), row.names = c(NA, 
    -1L), class = "data.frame"), structure(list(minX = 2, maxX = 3.8, 
        minY = 3, maxY = 6.9), row.names = c(NA, -1L), class = "data.frame"), 
    structure(list(minX = 1, maxX = 2.5, minY = 3, maxY = 6.9), row.names = c(NA, 
    -1L), class = "data.frame"), structure(list(minX = 4.9, maxX = 7.9, 
        minY = 1, maxY = 2.5), row.names = c(NA, -1L), class = "data.frame"), 
    structure(list(minX = 2, maxX = 3.8, minY = 1, maxY = 2.5), row.names = c(NA, 
    -1L), class = "data.frame"), structure(list(minX = 3, maxX = 6.9, 
        minY = 1, maxY = 2.5), row.names = c(NA, -1L), class = "data.frame"))

1 Ответ

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

При map есть только .xmap2 это будет .x, .y при передаче двух параметров). Кроме того, rep лицензирование в пределах mutate может привести к ошибке, поскольку mutate возвращает то же length, что и исходное количество строк

library(dplyr)
library(purrr)
library(tidyr)
map(modified_list, ~tibble(
                       xx = rep(.x$x, each = 200),
                       yy = rep(.x$y, each = 200)
                       )
        )

Или чистая опция

map(modified_list, uncount, weights = 200)

В base R мы также можем сделать

lapply(modified_list, function(dat) dat[rep(seq_len(nrow(dat)), each = 200), ])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...