2010-09-20 57 views
37

Làm cách nào để loại bỏ 100 phần tử cuối cùng của loạt thú cưng?R: loại bỏ các phần tử cuối cùng của một vector

tôi biết tên [-element] ký hiệu nhưng tôi không thể làm cho nó làm việc để trừ một phần đầy đủ

+0

cảm ơn Điều tôi thực sự cần là phức tạp hơn một chút. Tôi cần phải thay đổi chuỗi, xóa một số phần tử và thêm phần khác từ phía bên kia nhưng khi tôi làm c (rep (0,10), x [1: (length (x) -11)]) không phải là sở thú hơn. cheers – skan

+1

@skan: Còn việc chấp nhận câu trả lời để đánh dấu câu hỏi là đã giải quyết thì sao? – MERose

Trả lời

7

Chỉ cần sử dụng các chỉ số số, tức là

N <- nrow(X) 
X <- X[1:(N-100-1),] 

nơi bạn nên cần phải đảm bảo N lớn gấp 100 vv

5

nếu bạn là một một trong lót

x = x[1:(length(x) -101)] 
+0

Với tất cả các câu trả lời tôi đã xây dựng gần như những gì tôi cần coredata (zz2) <- c (đại diện (0,3), đầu (coredata (zz), - 3)) Bây giờ tôi chỉ cần sử dụng nó bên trong một loạt sở thú với một số cột, chỉ sửa đổi một cột. – skan

71

Tôi thích sử dụng head vì điều này vì dễ nhập hơn. Các phương pháp khác có thể thực hiện nhanh hơn mặc dù ... nhưng tôi lười biếng và máy tính của tôi là không. ;-)

x <- head(x,-100) 
> head(1:102,-100) 
[1] 1 2 
+3

Câu trả lời này phải được chấp nhận. Nó có thể được sử dụng mà không biết chiều dài của x trước, đó là thuận lợi nếu bạn đang cố gắng để chọn lọc đọc dữ liệu từ một tập tin. Từ '? Head':' n: Nếu âm, [return] tất cả trừ n số đầu tiên/đầu tiên của các phần tử x.' – C8H10N4O2

+1

Đáng chú ý là có 'đuôi()' hoạt động giống nhau nhưng ngược lại. –

8

Tôi đặt cược length<- là cách hiệu quả nhất để cắt một vector:

> x <- 1:10^5 
> length(x) 
[1] 100000 
> length(x) <- 3 
> x 
[1] 1 2 3 
2

Một one-liner vì lợi ích của sự hoàn chỉnh:

x <- lag(x, 100)[-1:-100] 
8

Trên thực tế, có một cách nhanh hơn nhiều:

y <- x[1:(length(x)-1)] 

Mã hiển thị:

> microbenchmark(y <- head(x, -1), y <- x[-length(x)],y <- x[1:(length(x)-1)], times=10000) 
Unit: microseconds 
         expr min  lq  mean median  uq  max 
      y <- head(x, -1) 71.399 76.4090 85.97572 78.9230 84.2775 2795.076 
     y <- x[-length(x)] 53.623 55.5585 65.15008 56.5680 61.1585 2523.141 
y <- x[1:(length(x) - 1)] 25.722 28.2925 36.43029 29.1855 30.4010 2410.975 
+0

không hoạt động nếu độ dài của 'x' là 1 –

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