【问题标题】:identifying and Replacing patterns in R识别和替换 R 中的模式
【发布时间】:2016-04-02 09:34:18
【问题描述】:

我有一个包含 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 ZOU.", "ZHOUSHAN", NOV1151$destination)

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

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

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

【问题讨论】:

  • 请提供可重现的示例和所需的输出
  • 很可能是NOV1151$destination &lt;- gsub(".*PORE.*", "SGR", NOV1151$destination)。添加示例。
  • 我已经用所需的输出和示例更新了问题。请看一看。谢谢
  • 您也有其他字符串或只有新加坡相关的字符串?请完成您的示例。

标签: regex r sorting text pattern-matching


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    Pierre Lafortune 已经给出了答案

    【讨论】:

      猜你喜欢
      • 2012-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多