创建数据框列表,并使用它来调用有关该数据框的详细信息

时间:2019-06-26 16:38:50

标签: r

我试图创建一个数据框列表,然后使用该数据框列表创建有关该数据框属性的另一个数据框。我想通过创建一个循环来做到这一点。

我尝试创建数据框列表。然后,我在循环中使用该列表,对新数据框中的每一行说,在第一列中输入数据框的名称,在另一列中输入该数据框的行数。


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 :(得分:0)

这是一个使用purrrdplyr软件包的解决方案,该软件包应适用于您的数据。您不再需要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)))