簡體   English   中英

指定使用 map_dfr 時哪些列相同

[英]Specify which columns are the same when using map_dfr

我有兩個文件夾,每個文件夾都有數百個 CSV,我想將它們全部合並到一個數據框中。 我使用了以下內容:

tbl <-
  list.files(path = c("./reports_0", "./reports_1"),
             pattern = "*.csv", 
             full.names = T) %>%
  map_dfr(~read_csv(., col_types = cols(.default = "c")))

現在我意識到其中一些 CSV 的列名是固件版本,有些是固件版本(大寫和小寫)。

我想指定它們是相同的,並且可以組合成一個稱為固件版本的版本。

by =

不起作用,我找不到解決方案。

希望有人能幫忙,謝謝!

編輯
我的解決方法是:

tbl <- tbl %>% 
  unite(`Firmware Version`, `Firmware version`, na.rm = T) %>% 
  mutate(`Firmware Version` = replace(`Firmware Version`, `Firmware Version`=="", NA_character_))

但是,我仍然想知道是否有更好,更直接的方法。

您可以使用janitor::make_clean_names()將列名轉換為相同的格式(例如 camelCase),然后進行行綁定。

例如:

library(data.table)
library(janitor)
ftr <- list.files(path = c("./reports_0", "./reports_1"), 
   pattern = ".*\\.csv$", 
   names = TRUE)

DT <- rbindlist(
  lapply(ftr, function(x) {
    tempDT <- fread(x)
    setnames(tempDT, names(tempDT), janitor::make_clean_names(names(tempDT)))
    return(tempDT)
  }), use.names = TRUE, fill = TRUE)

概念證明

將名稱轉換為 snake_case

> janitor::make_clean_names("Firmware Version")
[1] "firmware_version"
> janitor::make_clean_names("Firmware version")
[1] "firmware_version"

暫無
暫無

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

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