繁体   English   中英

使用冒号运算符了解数据帧的索引

[英]Understanding indexing of data frame with colon operator

我有一个来自MS的预测性维护R Notebook示例的data.frame。

现在,他们展示了如何像这样子化data.frame的子集(显示了使用head()tail()只显示一行代码的前几行和最后几行):

> errors[c(1:3, nrow(errors)-3:1),]
                datetime machineID errorID
1    2015-01-03 07:00:00         1  error1
2    2015-01-03 20:00:00         1  error3
3    2015-01-04 06:00:00         1  error5
3916 2015-12-04 02:00:00       100  error1
3917 2015-12-08 06:00:00       100  error2
3918 2015-12-08 06:00:00       100  error3

他们想输出

我不理解冒号运算符的作用。 但是我并不真正理解此示例中的功能。 因为:而4:1将返回

> 4:1
[1] 4 3 2 1

nrow(errors):1
   [1] 3919 3918 3917 3916 3915 3914 3913 3912 3911 3910 3909 3908 3907 3906 3905 3904 3903
  [18] 3902 3901 3900 3899 3898 3897 3896 3895 3894 3893 3892 3891 3890 3889 3888 3887 3886
...

然后以下内容不会返回我期望的结果:

> nrow(errors)-3:1
[1] 3916 3917 3918

我本来希望它返回与以前相同的长列表,但是从nrow(errors)-3处的索引开始。 所以像这样:

nrow(errors):1
       [1] 3916 3915 3914 3913 3912 3911 3910 3909 3908 3907 3906 3905 3904 3903
    ...

我在这里理解错了什么? 提前致谢!

感谢@markus和@Aaron Hayman和@G Grothendieck

首先评估冒号运算符。 以便

> 3:1
[1] 3 2 1

并且nrow(errors)将返回3919 然后减去3:1将得到一个像c(3919-3, 3919-2, 3919-1)的向量

通过重新考虑这一点,我意识到应该是:

> nrow(errors)-2:0
[1] 3917 3918 3919

真正获得最后三行,如下所示:

> errors[c(1:3, nrow(errors)-2:0),]
                datetime machineID errorID
1    2015-01-03 07:00:00         1  error1
2    2015-01-03 20:00:00         1  error3
3    2015-01-04 06:00:00         1  error5
3917 2015-12-08 06:00:00       100  error2
3918 2015-12-08 06:00:00       100  error3
3919 2015-12-22 03:00:00       100  error3

这有助于理解。 谢谢!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM