我有一个包含25列和超过600k观测值的数据集,其中一列被命名为“目的地”。这个专栏有新加坡等目的地,以不同的方式写成,例如新加坡以61种不同的方式写成新加坡,新加坡,新加坡等。我打算将与SINGAPORE相对应的所有这些值标准化,并将某个代码分配给该特定目的地以供进一步分析。
我尝试使用grep
和gsub()
来识别以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_replace
和stringr
的源代码,并编写了一个代码来复制效果,但是出现了以下错误:< / p>
Gen(MAY214)中的错误:缺少参数“x”,没有默认值 同时在MAY214数据集中更改相同的模式。我将我的功能命名为Gen
我是否应首先制作参考.CSV文件,然后尝试使用它来更改任何数据集中的模式,或者可以更好地完成?
答案 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提供