2013-05-05 119 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))) 
相关问题