繁体   English   中英

识别和替换R中的模式

[英]identifying and Replacing patterns in R

我有一个包含25列和超过60万观察值的数据集,其中一列称为“目的地”。 该列的目的地如新加坡等,以不同的方式编写,例如,新加坡以61种不同的方式写为SINGAPORE,S'PORE,SINGPORE等。 我打算标准化所有与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 <-gsub(“ ZOU。 ”,“ ZHOUSHAN”,NOV1151 $ destination)

在编写函数时,我查看了来自stringr包的gsub()str_replace的源代码,并编写了代码以复制效果,但是出现以下错误:

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

我应该先创建一个参考.CSV文件,然后尝试使用它来更改任何数据集中的模式,还是可以更好地完成它?

您可以在CRAN软件包“ stringdist”中找到一些帮助。 请注意,包含的函数“ stringdistmatrix”将对字符串向量元素之间的差异进行度量。 对于您提供的数据集,您可以通过使用度量“ osa”将距离小于等于4的元素合并到同一组中来获得指定的结果。 可以将组中最长或最频繁的字符串指定为组名。 手动注意的数量以及结果在“现实世界”中的可接受性将需要一些仔细的考虑。

NOV1151 $ destination <-gsub(“。 PORE。 ”,“ SGR”,NOV1151 $ destination)也可以正常工作!! 使用以上代码时,请考虑组合。 例如,对于INCHEON,使用NOV1151 $ destination <-gsub(“。 INCH。 ”,“ INCHEON”,NOV1151 $ destination)也将包含TIANJINCHINA,因为其文本也具有序列“ INCH”。 观察查找表,并有效使用R中的filter选项,以避免此类错误。

答案由Pierre Lafortune提供

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM