WebHU - Programozási kérdések és válaszok

Több excel fájl beolvasása R-be a térkép funkció segítségével

Tudom, hogy vannak ehhez hasonló kérdések, de még nem találkoztam olyanokkal, amelyek a purrr csomag térkép funkcióját használták volna. Nehéz dolgom van néhány excel fájlban (.xlsx) olvasni a purrr::map() használatával. Szeretném, ha mindegyik a saját adatkerete lenne. Kipróbáltam a megközelítést ebben a hasonló kérdésben: Hogyan olvashatok több (excel) ) fájlokat az R?-ba.

Viszont folyamatosan ezt a hibát kapom:

Hiba: nem létezik elérési út: "tab3_DOfinal_HUClevel_assessment.xlsx"

Biztosan tudom, hogy megvan a helyes út. Nem tudom, miért kapom ezt a hibát. Körülbelül 9 excel táblázatom van, amiben el szeretnék olvasni.

Kód, amit kipróbáltam:

# load necessary package
library(purrr)

file.list <- list.files(path="2016_Data_Tables",pattern='*.xlsx')
file.list <- setNames(file.list, file.list)

# store all .xlsx files as individual data frames inside of one list
df <- map(file.list, read_xlsx)

A fájlnév minta a következőképpen alakul:

tab3_DOfinal_HUClevel_assessment.xlsx

Az egyetlen dolog, ami változik, az a DOfinal rész.

Néhány mintaadat:

structure(list(ID = 1, WMA = 15, Number = "02040302020030-01", 
    HUC14 = "HUC02040302020030", Name = "Absecon Creek (AC Reserviors) (gage to SB)", 
    Region = "Atlantic Coast", NumofStations = "2", ListofStations = "01410455, R32", 
    ListofAssessment = "2, 2", HUCTier = "2", swqs = "PL, SE1", 
    TotalNumSamples5yrs = "NA", flgusgsprelim = "NA, 0", auassess = 2, 
    auassesstrout = -999, finalauassess = 2, finalauassesstrout = -999, 
    Changefrom2014 = "No Change-2", Changetroutfrom2014 = "No Change", 
    listHUC14assess5 = "NA", listHUC14assess3 = "NA", listHUC14assess2 = "01410455, R32", 
    His2014 = "Attaining", His2014trout = "-999", Notes = NA_character_, 
    OldStations2014 = "01410455", OldStationsAssess2014 = "2", 
    Error = NA_character_), .Names = c("ID", "WMA", "Number", 
"HUC14", "Name", "Region", "NumofStations", "ListofStations", 
"ListofAssessment", "HUCTier", "swqs", "TotalNumSamples5yrs", 
"flgusgsprelim", "auassess", "auassesstrout", "finalauassess", 
"finalauassesstrout", "Changefrom2014", "Changetroutfrom2014", 
"listHUC14assess5", "listHUC14assess3", "listHUC14assess2", "His2014", 
"His2014trout", "Notes", "OldStations2014", "OldStationsAssess2014", 
"Error"), row.names = c(NA, -1L), class = c("tbl_df", "tbl", 
"data.frame"))


structure(list(WMA = 15, Number = "02040302020030-01", HUC14 = "HUC02040302020030", 
    Name = "Absecon Creek (AC Reserviors) (gage to SB)", Region = "Atlantic Coast", 
    NumofStations = "1", ListofStations = "01410455", ListofAssessment = "2", 
    MaxStaAssessment = "2", MinStaAssessment = "2", TotalNumSamples5yrs = "NA", 
    auassess = "2", ChangeFrom2014 = "No Change-2", liststaassess2 = "01410455", 
    liststaassess3 = "NA", liststaassess5 = "NA", Assessment2014 = "Attaining", 
    Comments = NA_character_), .Names = c("WMA", "Number", "HUC14", 
"Name", "Region", "NumofStations", "ListofStations", "ListofAssessment", 
"MaxStaAssessment", "MinStaAssessment", "TotalNumSamples5yrs", 
"auassess", "ChangeFrom2014", "liststaassess2", "liststaassess3", 
"liststaassess5", "Assessment2014", "Comments"), row.names = c(NA, 
-1L), class = c("tbl_df", "tbl", "data.frame"))

structure(list(WMA = 15, Number = "02040302020030-01", HUC14 = "HUC02040302020030", 
    Name = "Absecon Creek (AC Reserviors) (gage to SB)", Region = "Atlantic Coast", 
    NumofStations = "1", ListofStations = "R32", ListofAssessment = "3", 
    MaxStaAssessment = "3", MinStaAssessment = "3", TotalNumSamples5yrs = "9", 
    auassess = "3", ChangeFrom2014 = "No Change-3", liststaassess2 = "NA", 
    liststaassess3 = "R32", liststaassess5 = "NA", Assessment2014 = "N/A", 
    Comments = NA_character_), .Names = c("WMA", "Number", "HUC14", 
"Name", "Region", "NumofStations", "ListofStations", "ListofAssessment", 
"MaxStaAssessment", "MinStaAssessment", "TotalNumSamples5yrs", 
"auassess", "ChangeFrom2014", "liststaassess2", "liststaassess3", 
"liststaassess5", "Assessment2014", "Comments"), row.names = c(NA, 
-1L), class = c("tbl_df", "tbl", "data.frame"))
13.09.2018

  • Íme az egyik stratégia: Próbáljon létrehozni egy adatkeretet egy oszloppal, amely minden fájl elérési útját tartalmazza. Ezután használja a mutate(newcol = map_df(filename, read_xls) és unnest 16.09.2018
  • list.files(path="2016_Data_Tables", pattern='*.xlsx', full.names = TRUE) (Egyébként a fájlnevek a path argumentumhoz viszonyítva vannak, nem az aktuális mappához). vagy sapply("2016_Data_Tables", file.path, list.files(path="2016_Data_Tables", pattern='*.xlsx')) 18.09.2018

Válaszok:


1

Az Aurèle nagyon jó megjegyzést tesz a fájl elérési útjait illetően.

Szeretném, ha mindegyik a saját adatkerete lenne

Ha ez a cél, akkor a purrr::iwalk és assign kombinációja könnyen elérheti. A folyamat a következőképpen zajlik:

  1. Szerezze meg a 2016_Data_Tables/ helyen található összes .xlsx fájl listáját.
  2. Ezután használja a purrr::set_names-t a lista minden elemének elnevezéséhez a fájlnévvel, a .xlsx kiterjesztéssel.
  3. Ezután a purrr::iwalk segítségével alkalmazza a assign függvényt a lista minden elemére. Pontosabban, használja a read_xlsx minden .xlsx fájlt a lemezről egy adatkeretbe olvasásához, majd rendelje hozzá az adatkeretet elnevezett objektumként R globális környezetéhez.
list.files('data/mpg', pattern = '.xlsx', full.names = T) %>% 
  purrr::set_names(stringr::str_remove(basename(.), '.xlsx$')) %>% 
  purrr::iwalk(function(x, i) assign(i, readxl::read_xlsx(x), .GlobalEnv))
18.03.2020
Új anyagok

A rádiógomb ellenőrzött eseményének használata a jQueryben
Ebben a cikkben látni fogjuk, hogyan kell dolgozni a jquery választógombbal ellenőrzött eseményeivel. A választógombok HTML gombok, amelyek segítenek kiválasztani egyetlen értéket egy csoportból...

Körkörös függőségek megoldása terraformban adatforrásokkal – lépésről lépésre
Mi az a körkörös függőségek Dolgozzunk egy egyszerű eseten, amikor az SQS-sor és az S3-vödör közötti körkörös függőség problémája van egy egymástól függő címkeérték miatt. provider..

Miért érdemes elkezdeni a kódolást 2023-ban?
01100011 01101111 01100100 01100101 — beep boop beep boop Világunk folyamatosan fejlődik a technológia körül, és naponta fejlesztenek új technológiákat a valós problémák megoldására. Amint..

🎙 Random Noise #2  – Örökbefogadás és hit
az analitika íratlan világának gondozása Szeretné, hogy ezek a frissítések a postaládájába kerüljenek? Iratkozzon fel itt . "Ha önvezető autókat gyártanak, akkor mi miért ne..

A legrosszabb politika és prediktív modellek májátültetésre jelöltek számára az Egyesült Államokban
A máj (vagy óangolul lifer) az emberi test legnehezebb belső szervére utal, amely csendesen működik a nap 24 órájában. Mit csinál a máj? 500 feladatot hajt végre a szervezet egészségének..

5 webhely, amely 2022-ben fejleszti front-end fejlesztői készségeit
Frontendmentor.io A tényleges projektek létrehozásával a Frontendmentor.io segítséget nyújt a front-end kódolási képességeinek fejlesztésében. A kódolást azután kezdheti meg, hogy..

Mikor kell használni a Type-t az interfészhez képest a TypeScriptben?
A TypeScript a JavaScript gépelt szuperkészlete, amely statikus gépelést ad a nyelvhez. Ez megkönnyíti a robusztus és karbantartható kód írását azáltal, hogy a hibákat a fordítási időben..