2010-05-24 53 views
1

我在R中的數據幀中有一行,它由長度爲0和1的未定長度的序列組成。所以「01」,「010」,「201」,「102」,「00012」......這樣的事情。替換R中的字符串中的元素

我想找到一種方法來確定字符串中的最後一個字符是否是NUMERICALLY最大的。爲了其他目的,將數據行中的行保留爲字符很重要。所以基本上我想要使用substr(x,nchar(x),nchar(x))並確定它作爲數字是否是字符串中最大的數字。

我超級失去了如何做到這一點,因爲我不是所有熟悉正則表達式,我必須來回處理元素作爲字符和數字之間來回。

在此先感謝。

〜莫林

回答

0

正則表達式是[0-9] $拿到最後一個數字,邏輯的其餘部分取決於你在開發環境中。

1

一種方法是

p <- as.numeric(strsplit("0120102","")[[1]]) 
if (max(p) == p[length(p)]) { 
    print("yes") 
} 

實際上可以自 「2」> 「1」> 「0」 忽略as.numeric():

p <- strsplit("0120102", "")[[1]] 

如果希望這適用於您的data.frame答:

apply(A, c(1,2), function(z) {p<-strsplit(z, "")[[1]];(max(p) == p[length(p)])}) 
7

df是數據框的名稱,並以字符串序列「01」行,「010」,「201」,「102」,「 00012「是No.2。你可以得到回答的問題是一個載體,如果在字符串中的最後一個字符是數字的最大給這個:

sapply(strsplit(as.character(df[2,]),""),function(x) x[length(x)] >= max(x)) 
[1] TRUE FALSE FALSE TRUE TRUE 
+0

你是我的英雄。這工作完美。謝謝! :) – Maureen 2010-05-24 21:32:07

0

我覺得你最好的選擇將是看在R語言是如何工作的正則表達式:

http://www.regular-expressions.info/rlanguage.html 

丹一樣在赫伯登上面的帖子說,你需要來標記您在您的文章給了作爲一個例子的字符串,然後grep的(......?)的標記爲正則表達式「[0 -9] $」。順便說一下,使用正則表達式,可以將所有對象都視爲字符,因此除非將grep函數的結果和解析爲數字形式比較。