Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
访问R data.frame中倒数第二个值的最佳方法是什么?_R_Dataframe - Fatal编程技术网

访问R data.frame中倒数第二个值的最佳方法是什么?

访问R data.frame中倒数第二个值的最佳方法是什么?,r,dataframe,R,Dataframe,假设我有一个名为SLV的data.frame,并应用tail()函数。我会得到这个: > tail(SLV) SLV.Open SLV.High SLV.Low SLV.Close SLV.Volume SLV.Adjusted 2010-12-06 28.99 29.64 28.88 29.51 57561800 29.51 2010-12-07 29.95 30.00 28.03 28.08 6914

假设我有一个名为SLV的data.frame,并应用tail()函数。我会得到这个:

> tail(SLV)

       SLV.Open SLV.High SLV.Low SLV.Close SLV.Volume SLV.Adjusted
2010-12-06    28.99    29.64   28.88     29.51   57561800        29.51
2010-12-07    29.95    30.00   28.03     28.08   69143800        28.08
2010-12-08    28.33    28.46   27.34     27.70   58203800        27.70
2010-12-09    28.10    28.36   27.83     28.03   36759200        28.03
2010-12-10    27.80    28.11   27.38     27.98   30602700        27.98
2010-12-13    28.84    29.04   28.59     28.87   25901800        28.87
tail()默认为最后6个值,但很容易只得到最后1个值

>tail(SLV, n=1)

       SLV.Open SLV.High SLV.Low SLV.Close SLV.Volume SLV.Adjusted
2010-12-13    28.84    29.04   28.59     28.87   25901800        28.87
但是,从第二天回到最后一天的最佳方式是什么?在我们的SLV示例中,它将是日期为2010-12-10的线条。

头(尾(SLV,n=2),n=1)


就可以了。

另一种选择:

tail(SLV,2)[-2]

比SLV更一般[nrow(SLV)-1,]:


文字[2]可以替换为向量,如果需要多行,则向量可能更整洁

我认为第二种解决方案是完成这项任务的正确方法。第一个太复杂了,当你在头/尾的
head
tail
+1中查看底层代码时,不管它们的实现如何-根据我的经验,它们是健壮的
SLV[nrow(SLV)-1,]
要快得多。如果特定列是目标,
SLV$SLV.Open[nrow(SLV)-1]
SLV[nrow(SLV)-1,“SLV.Open”]
快,或者
rev(1:nrow(SLV))
可以使用
(nrow(SLV):1)
SLV[nrow(SLV)-1,]
tail(SLV,2)[-2]
SLV[rev(1:nrow(SLV))[2],]