2014-10-31 64 views
1

使用GSUB特定圖案我具有關於R的gsub功能我有以下的矢量的一個問題:更換中的R

a=c('2.1','3.1.1.1','70','-940','10.1.1') 

其中我想申請gsub功能只提取以下內容:

b=c('2.1','3.1.1.1','10.1.1') 

這裏'b'是某個文件的段號。 所以基本上我想替換c('70','-940')並得到'b'。因爲,我是R的新手,我不確定這種特殊情況下進入gsub的模式。

在此先感謝您的幫助。

+0

'gsub'不改變向量的長度,因此它可能不是在這種情況下是正確的功能。你怎麼知道你想要刪除什麼?你是否將值存儲在另一個向量中?你知道你想刪除的指標嗎? – MrFlick 2014-10-31 05:44:20

+1

由於我只是在尋找節號,我知道他們有什麼樣的模式,這兩個不落在所需的模式。你能建議我應該使用哪個函數?另外,我想知道,這兩個值是否可以用gsub替換爲空格,這樣矢量的長度保持不變。 – SBS 2014-10-31 05:56:15

回答

0

這裏的最簡單的事情是要匹配基於週期和只使用grepl創建邏輯提取索引,而不是gsub

b <- a[grepl("^([[:digit:]]+\\.)+", a)] 
b 
## [1] "2.1"  "3.1.1.1" "10.1.1" 
+0

謝謝你的回答..這解決了我的問題的一部分。另一個問題是,說我有一個向量:a = c(「 - 70 ....」,「90」,「1.1.1」,「 23.1「)。使用你的方法我得到以下矢量:a = c(」 - 70 ....「,」1.1.1「,」23.1「),這是不正確的。請給出一種解決方法問題 – SBS 2014-10-31 06:22:43

+0

@SBS確定什麼是正確和錯誤的規則是什麼? – Thomas 2014-10-31 06:30:51

+0

沒有這樣定義的規則,但我知道段號在1到10之間,可以是「10.1」或「10.2.1」等形式,而高位數像70肯定是不正確的 – SBS 2014-10-31 06:32:59