簡體   English   中英

在 R 咕嚕聲中迭代讀取/變異 csv 文件

[英]iterate reading/mutating csv files in R purr

我在 R 中有一個 csv 文件的文件夾,需要根據文件名中的信息循環、清理和創建列。 我正在嘗試使用 purr,這就是我到目前為止所做的。

# get file names
files_names <- list.files("data/", recursive = TRUE, full.names = TRUE) 

# inspect
files_names 

[1] "data/BOC_All_ATMImage_(Aug 2020).txt" "data/BOC_All_ATMImage_(Aug 2021).txt" "data/BOC_All_ATMImage_(Feb 2021).txt"
[4] "data/BOC_All_ATMImage_(May 2021).txt" "data/BOC_All_ATMImage_(Nov 2020).txt" "data/BOC_All_ATMImage_(Nov 2021).txt"

# extract month/year inside brackets and convert to snakecase
# this will be used later to create column names

names_data <- files_names %>% 
  str_extract(., "(?<=\\().*?(?=\\))") %>% 
  str_to_lower() %>%
  str_replace(., " ", "_")

column_names

[1] "aug_2020" "aug_2021" "feb_2021" "may_2021" "nov_2020" "nov_2021"

現在循環遍歷 csvs,讀取每個 csv,進行一些數據清理並創建列


mc_data <-
  map(files_names,
         ~ read_csv(.x, guess_max = 50000) %>%
        janitor::clean_names() %>% 
           mutate(month_year = str_extract(.x, "(?<=\\().*?(?=\\))"),
                  date_dmy = paste0(day, "-", month_year),
                  date = dmy(date_dmy),
                  fsa = str_sub(postal_code, start = 1, end=3),
                  ?? = 1) %>% 
         select(-date_dmy),
         .id = "group"
  )

我需要再改變一列,並且該列必須根據提取的names_data命名。 我目前有這個?? 在上面的假代碼中。 names_data遵循與文件路徑相同的順序,因此我們的想法是在一個循環中執行,並在清理后保存每個數據。

我們可以使用膠合語法和map2 也許:

mc_data <-
    map2(files_names, column_names,
        ~ read_csv(.x, guess_max = 50000) %>%
            janitor::clean_names() %>% 
            mutate(month_year = str_extract(.x, "(?<=\\().*?(?=\\))"),
                   date_dmy = paste0(day, "-", month_year),
                   date = dmy(date_dmy),
                   fsa = str_sub(postal_code, start = 1, end=3),
                   '{.y}' := 1) %>% 
            select(-date_dmy),
        .id = "group"
    )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM