2012-11-07 37 views
0

匹配R,我有表:性格中的R

Field1 

&&hello 
&hi 
Hello 
Hi 

如何刪除以 「&」 開頭的一切嗎?

gsub("&", "", A$Field1) 

只會刪除「&」,而不是「& &你好」或「&喜」,因爲我需要它。 我試過「& *」或「& +」,但它仍然不起作用。

+1

如果像看起來在與前一個問題相關的問題中引用,請編輯並添加引用此前一個問題的鏈接。 – mnel

+0

我添加了正則表達式標籤,因爲這(以及你以前的問題)幾乎肯定會簡單地需要正確的正則表達式。但是您可能需要在數據幀加載到數據框之後澄清數據的確切結構。矩陣?向量? – joran

+0

簡化@ joran的評論:_什麼是'table'?_。 ** R **有'table'類,坦率地說,我懷疑這個數據結構類似於table類的對象。 (看看'?table'或'HairEyeColor'這是每個標準問題R安裝附帶的數據集)。 – aL3xa

回答

1

使用gsub,您需要將整個字符串匹配:

gsub("^&.*", "", A$Field1) 

但我覺得多了幾分優雅的ifelsegrepl組合:

ifelse(grepl("^&", A$Field1), "", A$Field1) 

如果目標是取代它在您的數據框中,然後您可以重新分配:

A$Field1 <- ifelse(grepl("^&", A$Field1), "", A$Field1) 
+0

'^&'應該就夠了,你不必檢查一行或多行的所有新行字符。 'grepl'更快,'ifelse'是evil = D(因爲它會在返回時進行長度強制)。我寧願得到一個邏輯向量來對所需的對象應用索引......無論是「vector」還是「data.frame」。 – aL3xa

+1

@ aL3xa,謝謝,但我的答案假設'A'是一個data.frame,並且用戶想要做一個就地替換'Field1'列。考慮到這一點,輸出的長度必須與'A $ Field1'的長度相同,並且您的評論都不適用。 – flodel

+0

謝謝!我會嘗試@工作。看起來我正在尋找什麼。我會嘗試gsub和ifelse –

0

我不是100%肯定你問什麼,但如果你想在他們的符號刪除線,您可以使用:

a <- c("&hi", "&&hello", "Hello", "Hi") 

b <- a[-grep("&", a)] 

> b 
[1] "Hello" "Hi" 

乾杯, 吉姆

+0

'a [!grepl(...)]'在'a'沒有匹配'&'的情況下更安全。 – flodel

+0

grapl將刪除記錄。但我需要留下空記錄 - 用「」或「」替換&& –