Nếu bạn tình cờ được sử dụng một data.table
(và tại sao mọi người không sử dụng nó, nếu bạn đang sử dụng một data.frame anyway?) - thì bạn có thể sử dụng toán tử .N
tiện dụng (more info), trong đó có chứa số hàng trong bảng của bạn.
Dưới đây là một ví dụ làm việc:
# 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)
Chỉ cần trao đổi rằng 5 cho 2 để có được kết quả mong muốn của OP.
Điều này tất nhiên cho phép sử dụng động cho các bảng có độ dài khác nhau mà không phải luôn sử dụng chức năng length()
. Ví dụ, nếu bạn biết rằng bạn luôn muốn lấy 5 dòng cuối cùng của một bảng và loại bỏ các hàng cuối cùng - nhận được 4 hàng như đầu ra - sau đó bạn có thể làm một cái gì đó như sau:
> 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
Hoặc đơn giản là luôn lấy hàng cuối cùng:
cars[.N]
... mà chỉ là như tốt đẹp và súc tích như tương đương Python: cars[-1]
)
Nguồn
2017-05-04 13:37:21
tôi hỏi một câu hỏi tương tự một số thời gian trước đây: http://stackoverflow.com/questions/ 7500644/elegant-indexing-up-to-end-of-vector-matrix – TMS