【问题标题】:How to apply multiple functions to a list of data frames?如何将多个函数应用于数据框列表?
【发布时间】:2021-07-20 20:41:02
【问题描述】:

我有一个包含 50 多个列数和行数相同的 csv 文件的列表。

我想查找每个数据帧的缺失值百分比,并且我找到了适用于单个文件的代码,如下所示:

missing.values <- estaciones2 %>% 
  gather(key = "key", value = "val") %>%
  mutate(is.missing = is.na(val)) %>%
  group_by(key, is.missing) %>%
  summarise(num.missing = n()) %>%
  filter(is.missing==T) %>%
  select(-is.missing) %>%
  arrange(desc(num.missing))

现在我想将这些函数应用于列表中的每个数据框。

我读到我可以使用 map 函数创建一个循环并为列表中的每个文件运行代码,尽管我不太确定如何将 map 函数插入到上面显示的代码中并且我已经尝试过以下但似乎不正确:

missing.values <- map(estaciones2, ~ map(estaciones2, ~ estaciones2 %>%
                        gather(key = "key", value = "val") %>%
                        mutate(is.missing = is.na(val)) %>%
                        group_by(key, is.missing) %>%
                        summarise(num.missing = n()) %>%
                        filter(is.missing==T) %>%
                        select(-is.missing) %>%
                        arrange(desc(num.missing)))

【问题讨论】:

    标签: r list dataframe pipe


    【解决方案1】:

    我们需要一个 lambda 函数 (~) 来循环 list(假设 estaciones2 是一个 list 对象)。 .x 是使用 lambda 调用的 list 的 data.frame 元素

    library(purrr)
    library(tidyr)
    library(dplyr)
    map(estaciones2, ~ .x %>%
                            gather(key = "key", value = "val") %>%
                            mutate(is.missing = is.na(val)) %>%
                            group_by(key, is.missing) %>%
                            summarise(num.missing = n()) %>%
                            filter(is.missing==T) %>%
                            select(-is.missing) %>%
                            arrange(desc(num.missing)))
    

    在 OP 的代码中,多个 map 函数在同一个 list 元素上一次又一次地被调用,即 estaciones2

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-11
      相关资源
      最近更新 更多