2013-05-05 64 views
2

我想使用R 「\ n 0.28 \ n \ n」得到字符的0.28。從R語言的字符「 n 0.28 n n」中獲得編號

也許我應該使用sub()函數,但我不知道該怎麼做。

+0

這幾乎是這些以前的問題的副本:http://stackoverflow.com/q/14543627/1036500和http://stackoverflow.com/q/15451251/1036500這些問題的一些答案也適用於這裏,例如。 'as.numeric(gsub(「[[:alpha:]]」,「」,string))' – Ben 2013-05-05 06:47:05

回答

11

通常,您想了解正則表達式。這可能令人生畏,但你也可以通過示例來學習。

在這裏,我們可以做的,比較簡單的事情:

R> txt <- "\n 0.28\n \n " 
R> gsub(".* ([0-9.]+).*", "\\1", txt) 
[1] "0.28" 
R> as.numeric(gsub(".* ([0-9.]+).*", "\\1", txt)) 
[1] 0.28 
R> 

(...)馬克的東西,我們「希望」,在這裏我們說,我們希望數字或點,其中幾(的+)。 "\\1"然後回憶那場比賽。

另外,我們也只是「抹掉」所有的\n和空間:

R> as.numeric(gsub("[\n ]", "", txt)) 
[1] 0.28 
R> 
+2

很好的反應和很好的解釋例子。正則表達式需要更多這個+1 – 2013-05-05 01:14:04

8

你並不需要爲您的使用案例的正則表達式。

string <- "\n 0.28\n \n " 
as.numeric(string) 
[1] 0.28 
+0

不錯的一個。似乎只要還有另一位數字就會中斷,但這個例子確實有效。 – 2013-05-05 01:04:15

+1

@Dirk。你不想讓它突破嗎?使用例如'txt < - 「\ n 1.5 \ n 33 \ n」'您的兩個解決方案將分別給出'33'和'1.533'。並不是說你的回答很糟糕。 – flodel 2013-05-05 01:27:26

1

迄今爲止的解決方案非常棒,實際上教會了你一些東西。如果你想在愚蠢的,但簡單的答案,taRifx::destring將工作:

library(taRifx) 
> destring("\n 0.28\n \n ") 
[1] 0.28 

它使用[^...]正則表達式的成語(「不」),而不是向後引用作爲@德克的解決方案:

return(as.numeric(gsub(paste("[^", keep, "]+", sep = ""), "", x)))