Jestem bardzo nowy w R i pracuję nad aktualizacją skryptu R, aby iterował przez serię tabel .dbf utworzonych za pomocą ArcGIS i tworzył serię wykresów.
Mam katalog C: \ Scratch, który będzie zawierał wszystkie moje pliki .dbf. Jednak gdy ArcGIS tworzy te tabele, zawiera również plik .dbf.xml. Chcę usunąć te pliki .dbf.xml z mojej listy plików, a tym samym z mojej iteracji. Bezskutecznie próbowałem wyszukiwać i eksperymentować z wyrażeniami regularnymi. Oto podstawowe wyrażenie, którego używam (z wyłączeniem wszystkich różnych eksperymentów):
files <- list.files(pattern = "dbf")
Czy ktoś może mi dać jakieś wskazówki?
glob2rx()
jest często pomocna.Odpowiedzi:
files <- list.files(pattern = "\\.dbf$")
$
na końcu oznacza, że jest to koniec łańcucha."dbf$"
też zadziała, ale dodawanie\\.
(.
jest to znak specjalny w wyrażeniach regularnych, więc musisz go uciec) upewnij się, że dopasujesz tylko pliki z rozszerzeniem.dbf
(w przypadku, gdy masz np..adbf
pliki).źródło
ignore.case
argument funkcji, więclist.files(pattern = "\\.dbf$", ignore.case=TRUE)
. Spójrz na stronę pomocy dla tej funkcji (?list.files
), aby uzyskać więcej informacji.Spróbuj tego, który używa globów zamiast wyrażeń regularnych, więc wybierze tylko nazwy plików kończące się na
.dbf
filenames <- Sys.glob("*.dbf")
źródło
Ustal wzór, aby znaleźć
"\\.dbf"
na końcu ciągu, używając$
znaku:list.files(pattern = "\\.dbf$")
źródło
\` escape the
.` teraz. Więc można się zastanawiać, dlaczego ten głos został odrzucony?Nie jestem dobry w używaniu wyrafinowanych wyrażeń regularnych, więc wykonałbym takie zadanie w następujący sposób:
files <- list.files() dbf.files <- files[-grep(".xml", files, fixed=T)]
Pierwsza linia zawiera tylko wszystkie pliki z katalogu roboczego. Drugi usuwa wszystko, co zawiera „.xml” (grep zwraca indeksy takich ciągów w wektorze „plików”; podzestawianie indeksami ujemnymi usuwa odpowiednie wpisy z wektora). Argument „ustalony” dla funkcji grep jest po prostu moim kaprysem, ponieważ zwykle chcę, aby spełniała ona surowe dopasowanie wzorców bez fantazyjnych wyrażeń regularnych w stylu Perla, co może mnie zaskoczyć.
Zdaję sobie sprawę, że takie rozwiązanie po prostu odzwierciedla wady mojej edukacji, ale dla nowicjusza może się przydać =) przynajmniej jest łatwe.
źródło
-
znakgrep
. Potrzebowałem takiego rozwiązania, aby wyodrębnić określone pliki z pliku zip. Najpierw pobierz listę plików w data.frame, pobierz określone pliki i wyodrębnij je później.lf <- unzip(file, list=T)[,1]; files.shp <- lf[grep(".shp", lf, fixed=T)]
Wyświetla listę plików z pełną ścieżką:
Sys.glob(file.path(file_dir, "*.dbf")) ## file_dir = file containing directory
źródło