Создайте список фреймов данных и используйте его для вызова сведений об этом фрейме данных. - PullRequest
0 голосов
/ 26 июня 2019

Я пытаюсь создать список фреймов данных и затем использовать этот список фреймов данных для создания другого фрейма данных с атрибутами этого фрейма данных.Я хотел сделать это, создав цикл.

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


df_Months <- as.list(c(df_Jan2018, df_Feb2018, df_March2018, df_April2018, df_May2018))


for i in 1:length(df_Months) {
  Monthly_Size$Month[i] <- paste(df_Months [i])
  Monthly_Size$Size[i] <- nrow(df_Months[i])
}


еслиЯ делаю nrow (df_Months [1]), результат равен NULL, хотя я знаю, что это не так, потому что если я просто делаю nrow (df_Jan2018), он возвращает мне правильное количество строк.

1 Ответ

0 голосов
/ 26 июня 2019

Вот решение с использованием пакетов purrr и dplyr, которые должны работать с вашими данными.Вам больше не понадобится цикл for.

library("purrr")
library("dplyr") 

test_df <- data.frame( a = c(1,2,3,4,NA),
                       b = c(NA,6,5,7,9))

test_df2 <- data.frame(c = c(1:10),
                       d = c(11:20))

df_list <- list(test_df = test_df, test_df2 = test_df2)

res <- map_dbl(df_list,nrow)
tibble(df = names(res), nrow = res)

Вывод выглядит следующим образом

# A tibble: 2 x 2
  df        nrow
  <chr>    <dbl>
1 test_df      5
2 test_df2    10

Несколько иной подход - поместить приведенный выше список df_list в таблицуа затем выполните операции с этим фрагментом и создайте новые строки с информацией, которую вы ищете.

df_tibble <- tibble(name = names(df_list), df = df_list)

df_tibble %>% mutate(nrow = map_dbl(df, ~ nrow(.x)))

# A tibble: 2 x 3
  name     df                     nrow
  <chr>    <list>                <dbl>
1 test_df  <data.frame [5 × 2]>      5
2 test_df2 <data.frame [10 × 2]>    10

Вы можете продолжить и включить дополнительную информацию таким образом.Например количество столбцов.

df_tibble %>% mutate(nrow = map_dbl(df, ~ nrow(.x)),
                     ncol = map_dbl(df, ~ ncol(.x)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...