簡體   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