识别和替换R

时间:2015-12-28 14:13:34

标签: regex r sorting text pattern-matching

我有一个包含25列和超过600k观测值的数据集,其中一列被命名为“目的地”。这个专栏有新加坡等目的地,以不同的方式写成,例如新加坡以61种不同的方式写成新加坡,新加坡,新加坡等。我打算将与SINGAPORE相对应的所有这些值标准化,并将某个代码分配给该特定目的地以供进一步分析。

我尝试使用grepgsub()来识别以ZHO

开头的目的地
NOV1151Sub <- NOV1151[grep("ZHO", NOV1151$destination)]

另外,我尝试使用'stringr'包没有效果。

因此,我想在大数据集中识别字符串,例如“PORE”在与新加坡相对应的所有值中都很常见,并将其替换为“SGR”以供进一步分析, 表看起来像

NAME  destination
a     S'PORE
b     SINPORE
C     SINGAPORE
d     XIAM
e     XIAMIN
f     XIAMEN
g     YANTIAN
h     YANTAI
i     ZHANGJIANG
j     ZHANGJIAGANG
k     RTD
l     ROTTER

期望的输出

NAME  destination
a     SINGAPORE 
b     SINGAPORE
c     SINGAPORE
d     XIAMEN
e     XIAMEN
f     XIAMEN
g     YANTIAN
h     YANTAI
i     ZHANGJIAGANG
j     ZHANGJAIGANG      
k     ROTTERDAM
l     ROTTERDAM

修复了更改模式的语法后,如何在不同名称的数据集中编写使用相同语法的函数?例如,我想将任何具有序列'ZOU'的模式更改为'ZOUSHAN'以及其他许多类似的模式。

要更改NOV1151数据集的目标列中的模式,我使用了以下代码     NOV1151 $ destination&lt; - gsub(“。 ZOU。”,“ZHOUSHAN”,NOV1151 $ destination)

为了编写函数,我查看了gsub()包中的str_replacestringr的源代码,并编写了一个代码来复制效果,但是出现了以下错误:< / p>

Gen(MAY214)中的错误:缺少参数“x”,没有默认值 同时在MAY214数据集中更改相同的模式。我将我的功能命名为Gen

我是否应首先制作参考.CSV文件,然后尝试使用它来更改任何数据集中的模式,或者可以更好地完成?

2 个答案:

答案 0 :(得分:0)

您可以在CRAN包中找到一些帮助&#34; stringdist&#34;。注意包含的函数&#34; stringdistmatrix&#34;将给出一个字符串向量元素之间差异的度量。对于您提供的数据集,您可以使用公制&#34; osa&#34;将距离为4或更小的元素组合到同一组中,从而获得指定的结果。也许组中最长或最频繁的字符串可以指定为组名。手动注意的数量,以及现实世界中结果的可接受性。需要仔细考虑。

答案 1 :(得分:0)

NOV1151 $ destination&lt; - gsub(“。 PORE。”,“SGR”,NOV1151 $ destination) 也行得很好!!使用上述代码时请考虑组合。 例如,对于INCHEON,使用 NOV1151 $ destination&lt; - gsub(“。 INCH。”,“INCHEON”,NOV1151 $ destination)  也将包括TIANJINCHINA,因为这个文本也有序列'INCH'。观察查找表并有效地使用R中的过滤器选项以避免此类错误。

答案由Pierre Lafortune提供