Свернуть список в тех же столбцах по элементам R - PullRequest
0 голосов
/ 09 мая 2019

У меня есть следующие элементы в списке, и я хочу свернуть их в фрейм данных, в котором сохраняются только те же столбцы в списке.

Я попробовал следующее, но это не дает мне именно то, что я хочу.Поскольку это просто NA столбцов, которых нет в другом элементе.Я был бы еще лучше иметь возможность выбирать, на какие столбцы сворачиваться.

n.obs <- sapply(lst, length)
seq.max <- seq_len(max(n.obs))
mat <- t(sapply(lst, "[", i = seq.max))




lst[[1]]
$id
[1] "akromils-production"

$name
[1] "Akro-Mils Production"

$month
[1] 12000

$year
[1] 137000

$units
[1] 3000

$clients
[1] 6

$pbox
[1] FALSE

$punits
[1] 0

$cbox
[1] FALSE

$cunits
[1] 0

$sbox
[1] FALSE

$sunits
[1] 0

$eval
[1] FALSE

$public
[1] FALSE

lst[[2]]
$id
[1] "adc-production-2"

$name
[1] "American Diagnostics - Production (2)"

$month
[1] 26000

$year
[1] 312000

$units
[1] 650

$clients
[1] 2

$pbox
[1] TRUE

$punits
[1] 650

$eval
[1] FALSE

$public
[1] FALSE

1 Ответ

0 голосов
/ 10 мая 2019

Как указано в комментариях, вы должны всегда предоставлять воспроизводимые образцы данных и код. Минимальные выборочные данные лучше всего использовать с dput, что позволяет избежать необходимости вручную вводить ваши данные, а также позволяет избежать двусмысленности из-за неизвестных / неоднозначных типов данных. Вы были вокруг ТАК некоторое время, поэтому вы должны знать, как публиковать хороших вопросов .

В ответ на ваш вопрос, один вариант будет использовать dplyr::bind_rows и dplyr::bind_cols, а затем выбрать только те столбцы, которые не содержат any NA s.

library(tidyverse)
bind_rows(map(lst, bind_cols)) %>% select_if(~!any(is.na(.x)))
## A tibble: 2 x 10
#  id         name           month   year units clients pbox  punits eval  public
#  <chr>      <chr>          <dbl>  <dbl> <dbl>   <dbl> <lgl>  <dbl> <lgl> <lgl>
#1 akromils-… Akro-Mils Pro… 12000 137000  3000       6 FALSE      0 FALSE FALSE
#2 adc-produ… American Diag… 26000 312000   650       2 TRUE     650 FALSE FALSE

Пример данных

lst <- list(
    list(
        id = "akromils-production",
        name = "Akro-Mils Production",
        month = 12000,
        year = 137000,
        units = 3000,
        clients = 6,
        pbox = FALSE,
        punits = 0,
        cbox = FALSE,
        cunits = 0,
        sbox = FALSE,
        sunits = 0,
        eval = FALSE,
        public = FALSE),
    list(
        id = "adc-production-2",
        name = "American Diagnostics - Production (2)",
        month = 26000,
        year = 312000,
        units = 650,
        clients = 2,
        pbox = TRUE,
        punits = 650,
        eval = FALSE,
        public = FALSE)
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...