[英]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.