2013-01-08 54 views
5

Giả sử tôi đọc tệp csv vào khung dữ liệu được gọi là "d". Tôi muốn in 2 hàng cuối cùng của khung dữ liệu này. Tôi đã thử dưới đây nhưng nó được in tất cả các nội dung bắt đầu từ n-1. Ai đó có thể giúp tôi hiểu hành vi này được không?Trích xuất tập con của khung dữ liệu trong R

> n<-nrow(d) 
> n 
[1] 153 
> subset(d[n:n-1,]) 
+0

'5: 5-1 [1] 4' ... –

Trả lời

6

Bạn chỉ có thể sử dụng đuôi

tail(d, 2) 

Sẽ cung cấp cho hai hàng cuối cùng.

2

này đang làm việc cho tôi ...

d <- matrix(1:10,nrow=5) 
d 
    [,1] [,2] 
[1,] 1 6 
[2,] 2 7 
[3,] 3 8 
[4,] 4 9 
[5,] 5 10 

d <- as.data.frame(d) 
d 
    V1 V2 
1 1 6 
2 2 7 
3 3 8 
4 4 9 
5 5 10 

n <- nrow(d) 
> n 
[1] 5 
d[n:(n-1),] ## Specifying the number of the row inside the brackets. 
V1 V2 
5 5 10 
4 4 9 

d[n:n-1,] ## without brackets it will do 5:5 -1 = 4, so printing only the fourth row 
    V1 V2 
4 4 9 
+0

Không cần tập hợp con ở đây. Bạn đang sử dụng [. – mnel

+0

@mnel yeah rite .. :) đã chỉnh sửa câu trả lời. – user1021713

6

@mnel là chính xác khi sử dụng tail() có thể là dễ nhất, tuy nhiên tôi nghĩ rằng sự nhầm lẫn của bạn phải liên quan đến cách tập hợp con() và công việc lập chỉ mục nói chung. Trong ví dụ của bạn phải lưu tâm về cách bạn có ma trận chỉ số và data.frames từ

d[(n:n - 1), ] 

là không giống như

d[n:(n-1), ] 

để kiểm tra sự khác biệt một cách cẩn thận từ thứ tự của các hoạt động này rất quan trọng để hiểu được. Các tập hợp con() chức năng cũng chỉ dựa trên một chỉ số hợp lý và có dạng

subset(object, subset = logicalvector) 

nơi vector logic cho các hàng mà bạn muốn trích xuất. Xem? Tập hợp con để biết thêm chi tiết.

1

Tôi sẽ sử dụng: tail(d, 2) hoặc d[(n-1):n, ] Hy vọng nó giúp

Các vấn đề liên quan