删除向量的最后一个元素

时间:2012-08-24 17:59:37

标签: r vector

我需要删除一组向量中的最后一个数字,即:

v <- 1:3
v1 <- 4:8

应该成为:

v <- 1:2
v1 <- 4:7

4 个答案:

答案 0 :(得分:60)

您可以在head(或tail)中使用否定偏移,因此head(x, -1)会删除 last 元素:

R> head( 1:4, -1)
[1] 1 2 3
R> 

这也可以节省对length()的额外通话。

编辑:正如Jason所指出的,这种方法实际上并不快。不能与经验争论。在我的机器上:

R> x <- rnorm(1000)
R> microbenchmark( y <- head(x, -1), y <- x[-length(x)], times=10000)
Unit: microseconds
                expr    min      lq median     uq     max
1   y <- head(x, -1) 29.412 31.0385 31.713 32.578 872.168
2 y <- x[-length(x)] 14.703 15.1150 15.565 15.955 706.880
R> 

答案 1 :(得分:25)

使用length获取对象的长度, - 删除最后一个。

v[-length(v)]

R中的负数索引提取给定的索引。

答案 2 :(得分:8)

Dirk和Iselzer已经提供了答案。 Dirk肯定是最直接的,但在我的系统上,至少它稍微慢一点,可能是因为[length检查的向量子集很便宜(根据来源,head实际使用length两次):

> x <- rnorm(1000)
> system.time(replicate(50000, y <- head(x, -1)))
   user  system elapsed 
   3.69    0.56    4.25 
> system.time(replicate(50000, y <- x[-length(x)]))
   user  system elapsed 
  3.504   0.552   4.058

这种模式可以支持更大的矢量长度和更多的复制。因人而异。在大多数情况下,head的易读性肯定超过了[的边际绩效提升。

答案 3 :(得分:3)

这是另一种选择,以前没有提出过。 v[-max(NROW(v))]#1 2 v1[-max(NROW(v1))]#4 5 6 7 将您的矢量视为1列矩阵。

x <- rnorm(1000)
system.time(replicate(50000, y <- head(x, -1)))
user  system elapsed 
3.446   0.292   3.762
system.time(replicate(50000, y <- x[-length(x)]))
user  system elapsed 
2.131   0.326   2.472
system.time(replicate(50000, y <- x[-max(NROW(x))]))
user  system elapsed 
2.076   0.262   2.342

基于上面的讨论,这比所有其他建议的方法(稍微)快一些:

while($row= mysqli_fetch_array($result))
{
    $ID =$row['Particulars_ID'];
    $name = $row['Name'];
    $number =$row['Number'];
    $status =$row['Status'];
    $remarks =$row['Remarks'];  
} 
相关问题