Попытка подмножества кадра данных - PullRequest
2 голосов
/ 17 января 2020

Используя фрейм данных mtcars:

head(mtcars)
                   mpg cyl disp  hp drat    wt  qsec vs am gear carb
Mazda RX4         21.0   6  160 110 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0   6  160 110 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8   4  108  93 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4   6  258 110 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7   8  360 175 3.15 3.440 17.02  0  0    3    2
Valiant           18.1   6  225 105 2.76 3.460 20.22  1  0    3    1

и, изучая подмножество (теперь я знаю, как сделать это с помощью правильного индексирования или subset), я экспериментировал и использовал код

head(mtcars[,-mtcars$drat])
                   mpg drat    wt  qsec vs am gear carb
Mazda RX4         21.0 3.90 2.620 16.46  0  1    4    4
Mazda RX4 Wag     21.0 3.90 2.875 17.02  0  1    4    4
Datsun 710        22.8 3.85 2.320 18.61  1  1    4    1
Hornet 4 Drive    21.4 3.08 3.215 19.44  1  0    3    1
Hornet Sportabout 18.7 3.15 3.440 17.02  0  0    3    2
Valiant           18.1 2.76 3.460 20.22  1  0    3    1

Что такое логика c за этим выводом?

1 Ответ

2 голосов
/ 17 января 2020

Преобразует число c в integer и использует его в качестве индекса для удаления столбцов

as.integer(mtcars$drat)
#[1] 3 3 3 3 3 2 3 3 3 3 3 3 3 3 2 3 3 4 4 4 3 2 3 3 3 4 4 3 4 3 3 4

Приведение к integer упоминается в ?Extract

i, j - индексы, указывающие элементы для извлечения или замены. Индексы являются цифрами c или символьными векторами, либо пустыми (отсутствуют), либо NULL. Числовые значения c приводятся к целому числу как as.integer (и, следовательно, обрезаются до нуля).

, то есть он будет выдавать тот же результат, удаляя уникальный индекс столбца, полученный из 'drat' column

setdiff(seq_along(mtcars), as.integer(mtcars$drat))
#[1]  1  5  6  7  8  9 10 11
head(mtcars[setdiff(seq_along(mtcars), as.integer(mtcars$drat))])
#                   mpg drat    wt  qsec vs am gear carb
#Mazda RX4         21.0 3.90 2.620 16.46  0  1    4    4
#Mazda RX4 Wag     21.0 3.90 2.875 17.02  0  1    4    4
#Datsun 710        22.8 3.85 2.320 18.61  1  1    4    1
#Hornet 4 Drive    21.4 3.08 3.215 19.44  1  0    3    1
#Hornet Sportabout 18.7 3.15 3.440 17.02  0  0    3    2
#Valiant           18.1 2.76 3.460 20.22  1  0    3    1

Однако, если мы удалим -, то есть выберем столбцы на основе индекса, то он будет дублировать столбцы, поскольку некоторые индексы (преобразованные целые числа дублируются)

head(mtcars[as.integer(mtcars$drat)]) 
...