我试图创建一个数据框列表,然后使用该数据框列表创建有关该数据框属性的另一个数据框。我想通过创建一个循环来做到这一点。
我尝试创建数据框列表。然后,我在循环中使用该列表,对新数据框中的每一行说,在第一列中输入数据框的名称,在另一列中输入该数据框的行数。
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),它将给我正确的行数。
答案 0 :(得分:0)
这是一个使用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)))