从向量返回最后一场比赛

时间:2016-05-24 03:52:42

标签: r

有没有一种简单的方法来获取向量的最后一个匹配的索引?

    else
    {
    $add_lakas="insert into lakas                                    (Terulet,Ar,Varos,Cim,Tipus1,Tipus2,Erkely,Lift,Emelet,SzobaNum)
values ('$Terulet','$Ar','$Varos','$Cim','$Tipus1','$Tipus2','$Erkely','$Lift','$Emelet','$SzobaNum')";

    $run_lakas = mysql_query($add_lakas);

    mysql_free_result($run_lakas);

    $add_elado="insert into elado (Nev,Kor,telefon) values  ('$Nev','$Kor','$telefon')";

    $run_elado = mysql_query($add_elado);

    mysql_free_result($run_elado);

    $add_eladas="insert into eladas (Tulajdonos_telefon) values ('$telefon')";

    $run_eladas = mysql_query($add_eladas);

    if($run_eladas )
    {
    echo "<script>alert('upload done!')</script>";

    echo "<script>window.open('Add.php','_self')</script>";
    }
    mysql_free_result($run_eladas);
    }
    }
    ?>

目标:3

4 个答案:

答案 0 :(得分:7)

另一种简单的方法是在max元素的索引上使用TRUE

x <- c(TRUE,FALSE,TRUE,FALSE,FALSE)

max(which(x))

#[1] 3

答案 1 :(得分:6)

当使用?Position参数时,

right=TRUE就是出于这种情况。以下所有内容应基本相同。

Position(I, x, right=TRUE)
#[1] 3
Position(identity, x, right=TRUE)
#[1] 3
Position(isTRUE, x, right=TRUE)
#[1] 3
Position(function(x) x, x, right=TRUE)
#[1] 3

答案 2 :(得分:2)

如果我们要与单个元素进行比较,我们可以使用==

tail(which(v1 == TRUE),1)
#[1] 3

==部分不是必需的,因为矢量是逻辑

tail(which(v1),1)
#[1] 3

注意:这里我假设OP的向量可能不总是TRUE / FALSE值,如示例中所示。

如果我们需要使用match,则会提到一个选项here

数据

v1 <- c(TRUE,FALSE,TRUE,FALSE,FALSE)

答案 3 :(得分:1)

如果考虑性能,那么我发现这样做的最好方法是

length(x) + 1L - match(TRUE, rev(x))

这明显更快,特别是在一般情况下,人们希望最多匹配一个以上的条目。

MatchLast <- function (needles, haystack) # This approach
  length(haystack) + 1L - match(needles, rev(haystack))  

MaxWhich <- function (needles, haystack)  # Ronak Shah's approach
  vapply(needles, function (needle) max(which(haystack==needle)), integer(1))

Pos <- function (needles, haystack)       # thelatemail's suggestion
  vapply(needles, function (needle) 
    Position(function (x) x == needle, haystack, right=TRUE),
    integer(1))

Tail <- function (needles, haystack)      # akrun's solution
  vapply(needles, function (needle) tail(which(haystack==needle), 1), integer(1))

使用Rilkon42的数据:

x <- c(TRUE, FALSE, TRUE, FALSE, FALSE)
microbenchmark(MatchLast(TRUE, x), MaxWhich(TRUE, x), Pos(TRUE, x), Tail(TRUE, x))

##  function    min      lq     mean  median      uq       max
## MatchLast 10.730 19.1270 175.3851 23.7920  28.458 14757.131   
##  MaxWhich 11.663 22.1600 275.4657 25.1920  28.224 24355.120       
##       Pos 25.192 47.5845 194.1296 52.7160  64.612 12890.622  
##      Tail 39.187 69.7435 223.1278 83.0395 101.233  9223.848  

在更一般的情况下:

needles <- 24:45
haystack <- c(45, 45, 44, 44, 43, 43, 42, 42, 41, 41, 40, 40, 39, 39, 38, 38, 37, 37,
  36, 36, 35, 35, 34, 34, 33, 33, 32, 32, 31, 31, 30, 30, 29, 29, 28, 28,
  27, 27, 26, 26, 25, 25, 24, 24)

microbenchmark(MatchLast(needles, haystack), MaxWhich(needles, haystack),
               Pos(needles, haystack), Tail(needles, haystack))

##  function     min       lq      mean    median       uq      max
## MatchLast  15.395  30.3240  137.3086   36.8550   48.051 9842.441
##  MaxWhich  90.971 102.1665  161.1100  172.3765  214.829  238.854
##       Pos 709.563 733.8220 1111.7000 1162.7780 1507.530 1645.383
##      Tail 654.981 690.2035 1017.7400  882.6385 1404.197 1595.933