Ответ 1
Я предпочитаю использовать tail
с отрицательными значениями для n
:
tail(mtcars,-2)
Как выбрать все, кроме первых двух строк, например. набор данных mtcars?
Я знаю, что могу написать no_mazda <- mtcars[3:32]
, который работает до тех пор, пока я знаю количество строк. Но когда я не знаю числа строк, которые мне нужно написать, например. no_mazda <- mtcars[3:nrow(mtcars)]
, который также работает, но:
Является ли R более разумным синтаксисом, чем выражение, которое включает mtcars
дважды?
Я предпочитаю использовать tail
с отрицательными значениями для n
:
tail(mtcars,-2)
Отрицательные индексы означают "пропустить":
mtcars[-(1:2)]
пропускает первые 2 индекса vector mtcars
. Если вам нужно пропустить первые 10, просто используйте mtcars[-(1:10)]
.
Обратите внимание, что вы говорите о "наборе данных", но код, который вы используете, предназначен для векторов, поэтому я также ответил, что mtcars
- это вектор. Если mtcars
является фреймворком данных и вы выбираете строки, вы должны использовать запятую:
mtcars[-(1:2),]
Если вы используете data.table
(и почему кто бы не использовал его, если вы используете data.frame в любом случае?) - тогда вы можете использовать удобный .N
оператор (подробнее), который по сути содержит количество строк в вашей таблице.
Вот рабочий пример:
# make sure you have data.table
install.packages("data.table")
library(data.table)
# load the mtcars data
data(mtcars)
# Make a data table out of the mtcars dataset
cars <- as.data.table(mtcars, keep.rownames = TRUE)
# Take all the rows from a given index (e.g. 5) to the end
> cars[5:.N]
rn mpg cyl disp hp drat wt qsec vs am gear carb
1: Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
2: Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
3: Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
4: Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
... (truncated)
Просто замените 5 для 2, чтобы получить желаемый выход OP.
Это, конечно, позволяет динамическое использование таблиц различной длины без необходимости всегда использовать функцию length()
. Например, если вы знаете, что всегда хотите взять последние 5 строк таблицы и удалить последнюю строку - получение 4 строк в качестве вывода - тогда вы можете сделать что-то вроде следующего:
> cars[(.N-4):(.N-1)] # note the expressions for slicing must be in parentheses
rn mpg cyl disp hp drat wt qsec vs am gear carb
1: Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.9 1 1 5 2
2: Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.5 0 1 5 4
3: Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.5 0 1 5 6
4: Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.6 0 1 5 8
Или просто всегда получите последнюю строку:
cars[.N]
..., который так же хорош и лаконичен, как эквивалент Python: cars[-1]
)