2017-04-10 30 views
0

我是R新手如果條件未滿足,我有一個簡單的刪除問題。在列上應用篩選器以刪除行

我有一個CSV文件,一列是IP地址,問題不是所有的IP地址都想刪除非IP地址的行。

樣品表My.Data

ID.   SIP   DIP 
1.  123.243.0.1  56 
2.  123.143.0.1  89 
3.  0.16783633  44 
4.  123.143.0.1  89 

所以要刪除的任何東西My.Data$SIP沒有[O-9]{3}\.[O-9]{3}\.[O-9]{3}\.

我很失落,我使用dplyr

謝謝

保羅

回答

0

使用filtergrepl。我在這裏假設IP地址的模式是「數字加點3次,然後是數字」。

library(dplyr) 
My.Data %>%> 
    filter(grepl("^(\\d+\\.){3}\\d+$", SIP)) 
+1

您的正則表達式並不完全正確,因爲您需要將數字限制爲1到3位數,因此您的正則表達式不會過濾掉「1234.5.6.7」。我相信''^(\\ d {1,3} \\。){3} \\ d + $「'會起作用。 – steveb

+0

當然,編輯適當的正則表達式:) – neilfws

0

看起來你已經熟悉正則表達式,所以你可以這樣做:

hits = grepl(pattern = "[0-9]{3}\\.[0-9]{3}\\.[0-9]{3}", x = My.Data$SIP) 
My.Data2 <- My.Data[hits,] 

基本上這只是讓無論您的數據幀匹配該列的邏輯矢量正則表達式。然後,我們根據該向量對數據進行子集分類。

+0

你好,我跑了你提供的,並得到了以下[1]否錯誤否,這是正確的方向丟失我正在使用的R Studio版本1.0.136 - ©2009- 2016 RStudio,Inc.,感謝您的幫助。 –

+0

'My.Data = data.frame(SIP = c(「023.152.342」,「not close」,「21.425.321」))grepl(pattern =「[0-9] {3} \\。[0 -9] {3} \\。[0-9] {3}「,x = My.Data $ SIP)'?我在猜測你並沒有把它作爲x或者其他小東西的正確載體。 – svenhalvorson