【问题标题】:R function to add column to dataframes using purrr::map [duplicate]R函数使用purrr :: map将列添加到数据框[重复]
【发布时间】:2022-02-09 05:42:35
【问题描述】:

我正在创建一个巨大的数据框,其中包含来自多个 .csv 文件的数据,这些文件具有每天不同颜色的价格。

我想添加一列,其中包含创建每个数据框的 .csv 文件的名称。所以例如。如果文件名为“GRAY.csv”,我希望生成的数据框添加一个新列“名称”,每个观察值都是“灰色”。

为了创建数据框,我使用了 purrr 包中的 map_df() 函数。

data_folder <- "data"
csv_files <- dir(data_folder, pattern = "[A-Z]\\.csv")

df <- csv_files %>%
  map_df(~ read_csv(file.path(data_folder, .)))

我得到了什么

df

## # A tibble: 3,175 × 2
##    date       price
##    <date>     <dbl>
##  1 2010-01-04  7.64
##  2 2010-01-05  7.66
##  3 2010-01-06  7.53
##  4 2010-01-07  7.52
##  5 2010-01-04  10.57
##  6 2010-01-05  10.50
##  7 2010-01-06  10.42
##  8 2010-01-07  10.52
##  9 2010-01-04  6.48
## 10 2010-01-05  6.35
## # … with 3,165 more rows

我想要什么

df

## # A tibble: 3,175 × 3
##    date       price  name
##    <date>     <dbl>  <chr>
##  1 2010-01-04  7.64   GRAY
##  2 2010-01-05  7.66   GRAY
##  3 2010-01-06  7.53   GRAY
##  4 2010-01-07  7.52   GRAY
##  5 2010-01-04  10.57  BLUE
##  6 2010-01-05  10.50  BLUE
##  7 2010-01-06  10.42  BLUE
##  8 2010-01-07  10.52  BLUE
##  9 2010-01-04  6.48   RED
## 10 2010-01-05  6.35   RED
## # … with 3,165 more rows

如何添加此名称列?

【问题讨论】:

    标签: r dataframe csv purrr


    【解决方案1】:
    csv_files %>%
     set_names(fs::path_ext_remove(basename(.))) %>%
     map_df(~ read_csv(file.path(data_folder, .)), .id = 'name')
    

    【讨论】:

      【解决方案2】:

      在将所有内容合并到一个数据框之前,将每个单独的数据框修改为具有此name 列,然后使用purrr::reduce() 合并最后的数据框。

      library(tidyverse)
      csv_files %>%
        map(
          ~ read_csv(file.path(data_folder, .x)) %>%
            mutate(name = str_remove(.x, "\\.csv"))
        ) %>%
        reduce(bind_rows)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2023-01-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-22
        • 1970-01-01
        相关资源
        最近更新 更多