【问题标题】:R : Browsing files in a folder and extracting names and data from itR:浏览文件夹中的文件并从中提取名称和数据
【发布时间】:2017-12-12 14:55:10
【问题描述】:

我需要从电子表格中提取一些数据,其中有很多(超过一百个),所以我认为使用一些 R 脚本会更快。 (也许是my first error,但我想尝试一下,提高自己使用 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 文件。如果存在“_”,那么我只保留它之前的内容,如果城市不在数据框中,则将其存储,如果没有,那么我只需删除扩展名即可获取城市名称。关于文件的扩展,我需要有这两种情况,因为里面的数据格式不一样:例如,站 ID 在 .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"

这是我的代码的输出(ID 很容易得到,但其余的可能不是......):

                       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

【问题讨论】:

  • 鉴于您提供的输入列表,预期结果是什么?对于 SO 的初学者来说,你的问题结构很好,做得很好 +1
  • 谢谢,好吧,我需要类似的输出,但我的数据框中没有 Bale-Mulhouse 和 Bale.Mulhouse(例如),只有 Bale-Mulhouse。
  • 所以基本上所有名称相同但分隔符创建2个条目的实例?所以Clermond-Fd 应该存在而Clermont.Fd 不应该存在?
  • 没错! (我在帖子中添加了明确的预期输出。)
  • donnes_triH, ENVOI_METEO, heres in Grenoble.St.Martin.heres, historique Bordeaux et Dinard, losvari, Luxeuil (2 个拼写), Mise_en_forme, @987654你这个和St-Quentin 是有效的输出)?除了这些奇怪的东西,我还有正确的答案。

标签: r regex gsub grepl


【解决方案1】:

代码

See code in use here

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))]

变化

这些变体基于 OP 的特定要求。有关每个变体的更多详细信息,请参阅结果下的差异部分。以下方法可以组合使用,以满足多个差异。

方法一

添加|^[\p{Lu}_\d]+ 以匹配从字符串开头到扩展名的大写字母、下划线和数字的任意组合。

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

方法二

添加|^\p{L}+(?:_\p{L}+)+ 以匹配任何字母一次或多次,后跟一个或多个[下划线后跟一个或多个字母]

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

结果

注意:以下结果集与您的预期输出之间存在一些差异。

差异

  • Clermont.Fd:这是因为Clermond != Clermontdt)。
  • ENVOI_METEO:请参阅 Variations方法 1,但它可能会对有效名称产生负面影响,因此我将这个 fix 设为可选从答案的实际代码中排除它。
  • Grenoble.St.Martin.heres:您的某些输入在. 之后包含小写字母(请参阅Cap.de.la.Heve.Le.HavreGrenoble.le.versoudBiarritz.anglet)。我不确定您想如何将其与其他结果区分开来。
  • Luxeuil:和Luxeil不一样,所以我不删。
  • Mise_en_forme:其他有效条目包括_(请参阅La-Rochelle_Aerodrome),因此我不确定从结果集中删除此值的前提是什么。如果是因为它不包含任何 .- 字符,您可以使用 Variations 处的模式:方法 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 &lt;- 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 &lt;- x[x != ""] 从向量中删除空字符串 x
  • y &lt;- gsub("[\\W_]", "", x, perl=TRUE) 复制x,同时将所有非单词字符以及下划线替换为空。或者(或者如果这并不总是适合您),可以使用[^\p{L}\p{N}](它匹配任何不是任何语言/脚本中的字母或数字的字符 - Unicode)。
    • 例如:
      • Bale-Mulhouse 变为 BaleMulhouse
      • Bale.Mulhouse 变为 BaleMulhouse
  • x[-which(duplicated(y))] 删除在 y 中发现重复值的索引(删除非字母数字字符后)。
    • 例如(参见最后一个要点的BaleMulhouse 示例):
      • BaleMulhouse 重复被删除。重复被定义为所有重复除了同类中的第一个,因此,只保留一组重复中的第一个。

【讨论】:

  • 哇,非常感谢您提供如此详细的答案和解释。我想我将简单地手动重命名文件夹中的一些文件,以避免剩余的一些差异。只要我有足够的声望点,我就会给你一个大大的 +1 回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-03
  • 2013-04-14
  • 1970-01-01
  • 2020-01-30
  • 2018-07-03
相关资源
最近更新 更多