[英]identifying and Replacing patterns in R
我有一个包含25列和超过60万观察值的数据集,其中一列称为“目的地”。 该列的目的地如新加坡等,以不同的方式编写,例如,新加坡以61种不同的方式写为SINGAPORE,S'PORE,SINGPORE等。 我打算标准化所有与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 <-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.