我在R中的数据帧中有一行,它由长度为0s 1s和2s的序列组成。所以“01”,“010”,“201”,“102”,“00012”......这样的事情。
我想找到一种方法来确定字符串中的最后一个字符是否是最大的数字。为了其他目的,我将数据框中的行保留为字符非常重要。所以基本上我想取substr(x,nchar(x),nchar(x))并确定它是否是字符串中最大的数字。
我对如何做到这一点非常迷茫,因为我对正则表达式并不熟悉,我必须在将元素作为字符和数字处理之间来回反复。
提前致谢。
〜莫林
答案 0 :(得分: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
答案 1 :(得分:1)
一种方法是
p <- as.numeric(strsplit("0120102","")[[1]])
if (max(p) == p[length(p)]) {
print("yes")
}
实际上你可以忽略as.numeric(),因为“2”&gt; “1”&gt; “0”:
p <- strsplit("0120102", "")[[1]]
如果您想将此应用于您的data.frame A:
apply(A, c(1,2), function(z) {p<-strsplit(z, "")[[1]];(max(p) == p[length(p)])})
答案 2 :(得分:0)
正则表达式将[0-9] $来获取最后一个数字,其余逻辑取决于您正在开发的环境。
答案 3 :(得分:0)
我认为你最好的选择是看看正则表达式在R语言中是如何运作的:
http://www.regular-expressions.info/rlanguage.html
就像Dan Heberden在上面的帖子中所说,你需要将你给出的字符串标记为你帖子中的一个例子,然后grep(...?)正则表达式的标记“[0-9] $ ”。顺便说一句,使用正则表达式,你可以将所有内容视为字符,所以你不必在数字和字符模式之间来回穿梭,除非你获取grep函数的结果并将其解析为数字形式比较。