2010-05-24 102 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函数的结果和解析为数字形式比较。