R: Просмотр файлов в папке и извлечение имен и данных из нее

Мне нужно извлечь некоторые данные из электронных таблиц, их много (более ста), поэтому я подумал, что будет быстрее сделать это с помощью некоторого R-скрипта. (Возможно, это моя первая ошибка, но я хотел бы попробовать и улучшить себя в манипулировании файлами и данными с использованием R.)

Все эти файлы находятся в одних и тех же папках, большинство из них имеют название метеостанции или города, только некоторые файлы не имеют значения. Более того, они не имеют одинаковых расширений: некоторые из них.csv, другие.xls, некоторые.txt, .zip или.r (это нежелательные файлы)

То, что я хочу сделать, это просмотреть мою папку, выбрать имя файла, если оно имеет отношение ко мне, только сохранить название города / станции, открыть файл, собрать нужную мне информацию, закрыть его и перейти к следующему файл.

Кроме того, в некоторых городах есть несколько станций или есть несколько файлов для одной и той же станции. Например:

SomeCity.csv and SomeCity_1966-2001.csv
AnotherCity.station1.xls, AnotherCity.station2.xls
ACity.station.xls, ACity_1977-2005.csv
My.City.csv, My-City.csv

Так что да, это не всегда так просто...

Вот что я сделал на данный момент, я смотрю только на файлы.csv и.xls. Если присутствует "_", то я сохраняю только то, что находится перед ним, и запасаю его, если города еще нет в информационном фрейме, если его нет, тогда я просто удаляю расширение, чтобы получить название города. Мне нужно иметь эти 2 случая, касающиеся расширения файла, потому что данные внутри не отформатированы одинаково: например, идентификатор станции находится в первом столбце в.xls, тогда как во втором столбце в.csv...

# Read files names :
files_list <- list.files(path="my/path/to/files")
n_files <- length(files_list)

df_out <- data.frame(matrix(ncol = 6, nrow = n_files))
x <- c("Name","Id","Granularity","Start","End","Missing")
colnames(df_out) <- x
i=1
j=1

# Browing the list of files
while(j<n_files)
{
  file = files_list[j]

  # Case of a .csv file  :
  if(grepl(".csv",file))
  {
    if(!grepl("_",file))
    {
      df_out$Name[i] <- gsub("\\.csv","",file)
      i <- i+1
    }
    else if(!any(grepl(gsub("\\_.*","",file),df_out$Name)))
    {
      df_out$Name[i] <- gsub("\\_.*","",file)
      i <- i+1
    }
  }

  # Case of a .xls file :
  else if(grepl(".xls",file))
  {
    if(!grepl("_",file))
    {
      df_out$Nom[i] <- gsub("\\.xls","",file)
      i <- i+1
    }
    else if(!any(grepl(gsub("\\_.*","",file),df_out$Name)))
    {
      df_out$Nom[i] <- gsub("\\_.*","",file)
      i <- i+1
    }
  }
  j <- j+1
}
df_out <- df_out[1:i-1,]

Проблема: в случае "My.city" и "My-City" у меня будет 2 разных записи в моем фрейме данных для одной и той же станции, как я могу избежать этого? Я думал об удалении "." или "-" и запишите название MyCity и посмотрите, не появился ли уже другой MyCity, но жителям My-City не очень приятно портить название города. Шучу, я просто чувствую, что есть лучший способ сделать это с помощью регулярных выражений. Честно говоря, я чувствую, что большинство вещей, которые я делаю, могут быть сделаны в несколько строк с помощью регулярных выражений.

Вот фактический список файлов, которые у меня есть:

"200601.txt"
"Abbeville.xls"
"Abbeville_1971-2005.csv"
"Agen.xls"
"Agen_1961-2005.csv"
"Ajaccio.xls"
"Ajaccio_1961-2003.csv"
"Auxerre.xls"
"Auxerre_1961-2005.csv"
"Bale-Mulhouse_1961-2005.csv"
"Bale.Mulhouse.xls"
"Beauvais_1994-2005.csv"
"Beauvais_2001-2005.csv"
"Besancon.xls"
"Besancon_1961-2005.csv"
"Biarritz.anglet.xls"
"Biarritz_1961-2005.csv"
"Bonneville.xls"
"Bordeaux.Merignac.xls"
"Bordeaux_1961-2005.csv"
"Boulogne_1994-2005.csv"
"Boulogne_2001-2005.csv"
"Bourg-St-Maurice_1994-2005.csv"
"Bourg-St-Maurice_2001-2005.csv"
"Bourges.xls"
"Bourges_1961-2005.csv"
"Brest.Guipavas.xls"
"Brest_1961-2005_sauf_1989.csv"
"Brive.xls"
"Caen.Carpiquet.xls"
"Caen_1961-2005.csv"
"Cap.de.la.Heve.Le.Havre.xls"
"Carcassonne.xls"
"Cazaux.xls"
"Chambery.Aix.xls"
"Chambery_1974-2005.csv"
"Charleville.Mezieres.xls"
"Chartres.xls"
"Chartres_1961-2005.csv"
"Clermond-Fd_1961-2005.csv"
"Clermont.Fd.xls"
"Cognac.xls"
"Cognac_1961-2005.csv"
"Colmar.xls"
"Dijon.xls"
"Dijon_1961-2005.csv"
"Dinard.xls"
"Dinard_1961-2005.csv"
"Dinard_2003-2005.csv"
"donnees_triH_1961_2005.csv
"Dunkerque.txt"
"Dunkerque_1974-2008.csv"
"Embrun.xls"
"Embrun_1961-2005.csv"
"ENVOI_METEO_20040405.zip"
"Gourdon_1994-2005.csv"
"Gourdon_2001-2005.csv"
"Grenoble.le.versoud.xls"
"Grenoble.St.Geoirs.xls"
"Grenoble.St.Martin.heres.xls"
"Grenoble_1968-2005.csv"
"historiques Bordeaux et Dinard.txt"
"Hyeres_2007-2009.csv"
"Istres.csv"
"Istres.txt"
"La-Rochelle_1961-2005.csv"
"La-Rochelle_Aerodrome_2007-2009.csv"
"La.Rochelle.xls"
"Le.Puy.xls"
"Le.Touquet.xls"
"Lille.xls"
"Lille_1961-2005.csv"
"losvari.11069001.txt"
"losvari.14137001.txt"
"losvari.17300001.txt"
"losvari.31069001.txt"
"losvari.33529001.txt"
"losvari.62826001.txt"
"losvari.64549001.txt"
"losvari.76552001.txt"
"losvari.78621001.txt"
"Luxeil.xls"
"Luxeuil_1961-2005.csv"
"Lyon.Bron.xls"
"Lyon_1961-2005.csv"
"Macon_1994-2005.csv"
"Macon_2001-2005.csv"
"Marignane.xls"
"Marignane_1961-2005.csv"
"Metz.Frescaty.xls"
"Metz_1961-2005.csv"
"Millau.xls"
"Mise_en_forme.r"
"Montelimar.xls"
"Montelimar_1961-2005.csv"
"Montpellier.xls"
"Montpellier_1961-2005.csv"
"Nantes.Bouguenais.xls"
"Nantes_1961-2005.csv"
"Nice.xls"
"Nice_1961-2005.csv"
"Nimes.Courbessac.xls"
"Nimes_1961-2005.csv"
"Orange.xls"
"Orange_1961-2005.csv"
"Orleans.xls"
"Orleans_1961-2005.csv"
"Paris_1950-2005.csv"
"Paris1.xls"
"Pau.Uzein.xls"
"Pau_03-2006.csv"
"Pau_1961-2005.csv"
"Perpignan.xls"
"Perpignan_1961-2005.csv"
"Reims.Courcy.xls"
"Reims_1961-2005.csv"
"Rennes.St.Jacques.xls"
"Rennes_1961-2005.csv"
"Rennes_1961-2005_sauf_2003-2004.csv"
"Rennes_2003-2004.csv"
"Rouen.Boos.xls"
"Rouen_1969-2005.csv"
"Saint.Brieuc.xls"
"Saint.Girons.xls"
"St-Etienne_1961-2005.csv"
"St-Girons_1961-2005.csv"
"St-Quentin_1961-2008.csv"
"St.Auban.xls"
"St.Etienne.Boutheon.xls"
"St.Quentin.xls"
"Strasbourg.Entzheim.xls"
"Strasbourg_1949-2005.csv"
"Toulon.xls"
"Toulon_1961-2005.csv"
"Toulouse.Blagnac.xls"
"Toulouse_1961-2005.csv"
"Tours.xls"
"Tours_1960-2005.csv"

И вот вывод моего кода (идентификатор будет легко получить, но, возможно, не все остальное...):

                       Name Id Granularity Start End Missing
1                 Abbeville NA          NA    NA  NA      NA
2                      Agen NA          NA    NA  NA      NA
3                   Ajaccio NA          NA    NA  NA      NA
4                   Auxerre NA          NA    NA  NA      NA
5             Bale-Mulhouse NA          NA    NA  NA      NA
6             Bale.Mulhouse NA          NA    NA  NA      NA
7                  Beauvais NA          NA    NA  NA      NA
8                  Besancon NA          NA    NA  NA      NA
9           Biarritz.anglet NA          NA    NA  NA      NA
10               Bonneville NA          NA    NA  NA      NA
11        Bordeaux.Merignac NA          NA    NA  NA      NA
12                 Boulogne NA          NA    NA  NA      NA
13         Bourg-St-Maurice NA          NA    NA  NA      NA
14                  Bourges NA          NA    NA  NA      NA
15           Brest.Guipavas NA          NA    NA  NA      NA
16                    Brive NA          NA    NA  NA      NA
17           Caen.Carpiquet NA          NA    NA  NA      NA
18  Cap.de.la.Heve.Le.Havre NA          NA    NA  NA      NA
19              Carcassonne NA          NA    NA  NA      NA
20                   Cazaux NA          NA    NA  NA      NA
21             Chambery.Aix NA          NA    NA  NA      NA
22     Charleville.Mezieres NA          NA    NA  NA      NA
23                 Chartres NA          NA    NA  NA      NA
24              Clermond-Fd NA          NA    NA  NA      NA
25              Clermont.Fd NA          NA    NA  NA      NA
26                   Cognac NA          NA    NA  NA      NA
27                   Colmar NA          NA    NA  NA      NA
28                    Dijon NA          NA    NA  NA      NA
29                   Dinard NA          NA    NA  NA      NA
30                  donnees NA          NA    NA  NA      NA
31                Dunkerque NA          NA    NA  NA      NA
32                   Embrun NA          NA    NA  NA      NA
33                  Gourdon NA          NA    NA  NA      NA
34      Grenoble.le.versoud NA          NA    NA  NA      NA
35       Grenoble.St.Geoirs NA          NA    NA  NA      NA
36 Grenoble.St.Martin.heres NA          NA    NA  NA      NA
37                   Hyeres NA          NA    NA  NA      NA
38                   Istres NA          NA    NA  NA      NA
39              La-Rochelle NA          NA    NA  NA      NA
40              La.Rochelle NA          NA    NA  NA      NA
41                   Le.Puy NA          NA    NA  NA      NA
42               Le.Touquet NA          NA    NA  NA      NA
43                    Lille NA          NA    NA  NA      NA
44                   Luxeil NA          NA    NA  NA      NA
45                  Luxeuil NA          NA    NA  NA      NA
46                Lyon.Bron NA          NA    NA  NA      NA
47                    Macon NA          NA    NA  NA      NA
48                Marignane NA          NA    NA  NA      NA
49            Metz.Frescaty NA          NA    NA  NA      NA
50                   Millau NA          NA    NA  NA      NA
51               Montelimar NA          NA    NA  NA      NA
52              Montpellier NA          NA    NA  NA      NA
53        Nantes.Bouguenais NA          NA    NA  NA      NA
54                     Nice NA          NA    NA  NA      NA
55         Nimes.Courbessac NA          NA    NA  NA      NA
56                   Orange NA          NA    NA  NA      NA
57                  Orleans NA          NA    NA  NA      NA
58                    Paris NA          NA    NA  NA      NA
59                   Paris1 NA          NA    NA  NA      NA
60                Pau.Uzein NA          NA    NA  NA      NA
61                Perpignan NA          NA    NA  NA      NA
62             Reims.Courcy NA          NA    NA  NA      NA
63        Rennes.St.Jacques NA          NA    NA  NA      NA
64               Rouen.Boos NA          NA    NA  NA      NA
65             Saint.Brieuc NA          NA    NA  NA      NA
66             Saint.Girons NA          NA    NA  NA      NA
67               St-Etienne NA          NA    NA  NA      NA
68                St-Girons NA          NA    NA  NA      NA
69               St-Quentin NA          NA    NA  NA      NA
70                 St.Auban NA          NA    NA  NA      NA
71      St.Etienne.Boutheon NA          NA    NA  NA      NA
72               St.Quentin NA          NA    NA  NA      NA
73      Strasbourg.Entzheim NA          NA    NA  NA      NA
74                   Toulon NA          NA    NA  NA      NA
75         Toulouse.Blagnac NA          NA    NA  NA      NA
76                    Tours NA          NA    NA  NA      NA

Спасибо за ваши идеи и помощь. С уважением.

РЕДАКТИРОВАТЬ: ожидаемый результат для df_out$Name: (Используя Id, я смогу сказать, является ли Grenoble.St.Geoirs той же станцией, что и Grenoble.St.Martin или нет, поэтому сейчас она все еще здесь.)

Abbeville
Agen
Ajaccio
Auxerre
Bale-Mulhouse
Beauvais
Besancon
Biarritz.anglet
Biarritz
Bonneville
Bordeaux.Merignac
Bordeaux
Boulogne
Bourg-St-Maurice
Bourges
Brest.Guipavas
Brest
Brive
Caen.Carpiquet
Caen
Cap.de.la.Heve.Le.Havre
Carcassonne
Cazaux
Chambery.Aix
Chambery
Charleville.Mezieres
Chartres
Clermond-Fd
Cognac
Colmar
Dijon
Dinard
Dunkerque
Embrun
Gourdon
Grenoble.le.versoud
Grenoble.St.Geoirs
Grenoble.St.Martin
Grenoble
Hyeres
Istres
La-Rochelle_Aerodrome
La-Rochelle
Le.Puy
Le.Touquet
Lille
Luxeil
Lyon.Bron
Lyon
Macon
Marignane
Metz.Frescaty
Metz
Millau
Montelimar
Montpellier
Nantes.Bouguenais
Nantes
Nice
Nimes.Courbessac
Nimes
Orange
Orleans
Paris
Paris1
Pau.Uzein
Pau
Perpignan
Reims.Courcy
Reims
Rennes.St.Jacques
Rennes
Rouen.Boos
Rouen
Saint.Brieuc
Saint.Girons
St-Etienne
St-Girons
St-Quentin
St.Auban
St.Etienne.Boutheon
Strasbourg.Entzheim
Strasbourg
Toulon
Toulouse.Blagnac
Toulouse
Tours

1 ответ

Решение

Код

Смотрите код в использовании здесь

x <- c("200601.txt","Abbeville.xls","Abbeville_1971-2005.csv","Agen.xls","Agen_1961-2005.csv","Ajaccio.xls","Ajaccio_1961-2003.csv","Auxerre.xls","Auxerre_1961-2005.csv","Bale-Mulhouse_1961-2005.csv","Bale.Mulhouse.xls","Beauvais_1994-2005.csv","Beauvais_2001-2005.csv","Besancon.xls","Besancon_1961-2005.csv","Biarritz.anglet.xls","Biarritz_1961-2005.csv","Bonneville.xls","Bordeaux.Merignac.xls","Bordeaux_1961-2005.csv","Boulogne_1994-2005.csv","Boulogne_2001-2005.csv","Bourg-St-Maurice_1994-2005.csv","Bourg-St-Maurice_2001-2005.csv","Bourges.xls","Bourges_1961-2005.csv","Brest.Guipavas.xls","Brest_1961-2005_sauf_1989.csv","Brive.xls","Caen.Carpiquet.xls","Caen_1961-2005.csv","Cap.de.la.Heve.Le.Havre.xls","Carcassonne.xls","Cazaux.xls","Chambery.Aix.xls","Chambery_1974-2005.csv","Charleville.Mezieres.xls","Chartres.xls","Chartres_1961-2005.csv","Clermond-Fd_1961-2005.csv","Clermont.Fd.xls","Cognac.xls","Cognac_1961-2005.csv","Colmar.xls","Dijon.xls","Dijon_1961-2005.csv","Dinard.xls","Dinard_1961-2005.csv","Dinard_2003-2005.csv","donnees_triH_1961_2005.csv","Dunkerque.txt","Dunkerque_1974-2008.csv","Embrun.xls","Embrun_1961-2005.csv","ENVOI_METEO_20040405.zip","Gourdon_1994-2005.csv","Gourdon_2001-2005.csv","Grenoble.le.versoud.xls","Grenoble.St.Geoirs.xls","Grenoble.St.Martin.heres.xls","Grenoble_1968-2005.csv","historiques Bordeaux et Dinard.txt","Hyeres_2007-2009.csv","Istres.csv","Istres.txt","La-Rochelle_1961-2005.csv","La-Rochelle_Aerodrome_2007-2009.csv","La.Rochelle.xls","Le.Puy.xls","Le.Touquet.xls","Lille.xls","Lille_1961-2005.csv","losvari.11069001.txt","losvari.14137001.txt","losvari.17300001.txt","losvari.31069001.txt","losvari.33529001.txt","losvari.62826001.txt","losvari.64549001.txt","losvari.76552001.txt","losvari.78621001.txt","Luxeil.xls","Luxeuil_1961-2005.csv","Lyon.Bron.xls","Lyon_1961-2005.csv","Macon_1994-2005.csv","Macon_2001-2005.csv","Marignane.xls","Marignane_1961-2005.csv","Metz.Frescaty.xls","Metz_1961-2005.csv","Millau.xls","Mise_en_forme.r","Montelimar.xls","Montelimar_1961-2005.csv","Montpellier.xls","Montpellier_1961-2005.csv","Nantes.Bouguenais.xls","Nantes_1961-2005.csv","Nice.xls","Nice_1961-2005.csv","Nimes.Courbessac.xls","Nimes_1961-2005.csv","Orange.xls","Orange_1961-2005.csv","Orleans.xls","Orleans_1961-2005.csv","Paris_1950-2005.csv","Paris1.xls","Pau.Uzein.xls","Pau_03-2006.csv","Pau_1961-2005.csv","Perpignan.xls","Perpignan_1961-2005.csv","Reims.Courcy.xls","Reims_1961-2005.csv","Rennes.St.Jacques.xls","Rennes_1961-2005.csv","Rennes_1961-2005_sauf_2003-2004.csv","Rennes_2003-2004.csv","Rouen.Boos.xls","Rouen_1969-2005.csv","Saint.Brieuc.xls","Saint.Girons.xls","St-Etienne_1961-2005.csv","St-Girons_1961-2005.csv","St-Quentin_1961-2008.csv","St.Auban.xls","St.Etienne.Boutheon.xls","St.Quentin.xls","Strasbourg.Entzheim.xls","Strasbourg_1949-2005.csv","Toulon.xls","Toulon_1961-2005.csv","Toulouse.Blagnac.xls","Toulouse_1961-2005.csv","Tours.xls","Tours_1960-2005.csv")
x <- gsub("^\\p{Ll}.*$|(?:[_.]\\d.*|(?:^\\d+)?\\.[^.]+)$", "", x, perl=TRUE)
x <- x[x != ""]
y <- gsub("[\\W_]", "", x, perl=TRUE)
x[-which(duplicated(y))]

вариации

Эти изменения основаны на конкретных требованиях ОП. Для получения более подробной информации о каждом варианте, пожалуйста, смотрите раздел Discrepencies под Результатами. Приведенные ниже методы могут быть объединены таким образом, чтобы они удовлетворяли множественным различиям.

Способ 1

Добавляет |^[\p{Lu}_\d]+ чтобы сопоставить любую комбинацию заглавных букв, подчеркивания и цифр от начала строки до расширения.

^\p{Ll}.*$|(?:[_.]\d.*|(?:^\d+|^[\p{Lu}_\d]+)?\.[^.]+)$

Способ 2

Добавляет |^\p{L}+(?:_\p{L}+)+ совпадать с любой буквой один или несколько раз, за ​​которыми следует одна или несколько из [подчеркивание, за которым следуют одна или несколько букв]

^\p{Ll}.*$|(?:[_.]\d.*|(?:^\d+|^\p{L}+(?:_\p{L}+)+)?\.[^.]+)$

Результаты

Примечание. Существует несколько несоответствий между приведенным ниже набором результатов и ожидаемым результатом.

Discrepencies

  • Clermont.Fd: Это потому что Clermond != Clermont(d против t).
  • ENVOI_METEO: См. Вариации: Метод 1, но это может иметь негативные последствия для допустимых имен, поэтому я сделал это исправление необязательным, исключив его из фактического кода ответа.
  • Grenoble.St.Martin.heres: Некоторые из ваших входных данных включают строчные буквы после . (увидеть Cap.de.la.Heve.Le.Havre, Grenoble.le.versoud, а также Biarritz.anglet). Я не уверен, как вы хотите отличить это от остальных ваших результатов.
  • Luxeuil: Не то же самое, что Luxeilтак что я не удаляю это.
  • Mise_en_forme: Другие действительные записи включают _ (увидеть La-Rochelle_Aerodrome), таким образом я не уверен, что посылка удаляет это значение из набора результатов. Если это потому, что он не содержит . или же - символов, вы можете использовать шаблон в Вариации: Метод 2.

Выход

Abbeville
Agen
Ajaccio
Auxerre
Bale-Mulhouse
Beauvais
Besancon
Biarritz.anglet
Biarritz
Bonneville
Bordeaux.Merignac
Bordeaux
Boulogne
Bourg-St-Maurice
Bourges
Brest.Guipavas
Brest
Brive
Caen.Carpiquet
Caen
Cap.de.la.Heve.Le.Havre
Carcassonne
Cazaux
Chambery.Aix
Chambery
Charleville.Mezieres
Chartres
Clermond-Fd
Clermont.Fd
Cognac
Colmar
Dijon
Dinard
Dunkerque
Embrun
ENVOI_METEO
Gourdon
Grenoble.le.versoud
Grenoble.St.Geoirs
Grenoble.St.Martin.heres
Grenoble
Hyeres
Istres
La-Rochelle
La-Rochelle_Aerodrome
Le.Puy
Le.Touquet
Lille
Luxeil
Luxeuil
Lyon.Bron
Lyon
Macon
Marignane
Metz.Frescaty
Metz
Millau
Mise_en_forme
Montelimar
Montpellier
Nantes.Bouguenais
Nantes
Nice
Nimes.Courbessac
Nimes
Orange
Orleans
Paris
Paris1
Pau.Uzein
Pau
Perpignan
Reims.Courcy
Reims
Rennes.St.Jacques
Rennes
Rouen.Boos
Rouen
Saint.Brieuc
Saint.Girons
St-Etienne
St-Girons
St-Quentin
St.Auban
St.Etienne.Boutheon
Strasbourg.Entzheim
Strasbourg
Toulon
Toulouse.Blagnac
Toulouse
Tours

объяснение

  • x <- gsub("^\\p{Ll}.*$|(?:[_.]\\d.*|(?:^\\d+)?\\.[^.]+)$", "", x, perl=TRUE) Заменить спички ничем.
    • ^\p{Ll}.*$|(?:[_.]\d.*|(?:^\d+)?\.[^.]+)$ Соответствует любому из следующих
      • ^\p{Ll}.*$ Сопоставьте следующее (это удаляет donnes... а также hsitorique... так как они начинаются со строчных букв)
        • ^ Утвердить позицию в начале линии
        • \p{Ll} Совпадение любой строчной буквы на любом языке (Unicode)
        • .* Совпадение с любым персонажем любое количество раз
        • $ Утвердить позицию в конце строки
      • (?:[_.]\d.*|(?:^\d+)?\.[^.]+)$ Сопоставьте следующее (это удаляет подчеркивание или точки со следующими цифрами, расширениями файлов и именованными файлами только с номерами)
        • (?:[_.]\d.*|(?:^\d+)?\.[^.]+) Соответствует любому из следующих
          • [_.]\d.* Подходим следующее
            • [_.] Совпадение с любым символом в наборе (подчеркивание или точка)
            • \d Совпадение цифры
            • .* Совпадение с любым персонажем любое количество раз
          • (?:^\d+)?\.[^.]+ Подходим следующее
            • (?:^\d+)? Сопоставьте следующий ноль или один раз
              • ^ Утвердить позицию в начале линии
              • \d+ Совпадение с одной или несколькими цифрами
            • \. Матч точка буквально
            • [^.]+ Совпадение с любым символом, отсутствующим в наборе (любой символ, кроме точки), один или несколько раз
        • $ Утвердить позицию в конце строки
  • x <- x[x != ""] Удаляет пустые строки из вектора x
  • y <- gsub("[\\W_]", "", x, perl=TRUE) Копии x при замене всех символов, которые не являются символами слова, а также подчеркиванием ни с чем. В качестве альтернативы (или если это не всегда работает для вас), [^\p{L}\p{N}] может быть использован (который соответствует любому символу, который не является буквой или цифрой на любом языке / сценарии - Unicode).
    • Например:
      • Bale-Mulhouse становится BaleMulhouse
      • Bale.Mulhouse становится BaleMulhouse
  • x[-which(duplicated(y))] Удаляет индексы, где повторяющиеся значения были найдены в y (после удаления не буквенно-цифровых символов).
    • Например (см. Пример последней маркированной точки BaleMulhouse):
      • BaleMulhouse дубликат удаляется. Дубликаты определяются как все дубликаты, кроме первого в своем роде, таким образом, останется только первый из набора дубликатов.
Другие вопросы по тегам