Понимание индексации фрейма данных с помощью оператора двоеточия - PullRequest
0 голосов
/ 12 октября 2018

У меня есть data.frame из примера записной книжки R по техническому обслуживанию от MS.

Теперь они показывают, как подобрать этот 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

Они хотят вывести

Я понимаю, что такое двоеточиеоператор делает.Но я не очень понимаю, что он делает в этом примере.Потому что: while 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
    ...

Что я здесь не так понимаю?Заранее спасибо!

1 Ответ

0 голосов
/ 12 октября 2018

Благодаря @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

Это помогло пониманию.Спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...