2011-09-24 44 views
62

Tôi có một tập dữ liệu với 11 cột với hơn 1000 dòng mỗi. Các cột được dán nhãn V1, V2, V11, v.v. Tôi đã thay thế các tên bằng một cái gì đó hữu ích hơn cho tôi bằng cách sử dụng lệnh "c". Tôi không nhận thấy hàng 1 cũng chứa nhãn cho mỗi cột và dữ liệu thực tế của tôi bắt đầu trên hàng 2.Làm thế nào để xóa hàng đầu tiên của một khung dữ liệu trong R?

Có cách nào để xóa hàng 1 và giảm không?

Trả lời

105

Giữ nhãn từ tập tin ban đầu của bạn như thế này (giả sử bạn đọc nó trong qua read.table() hoặc một trong các giấy gói nó.):

df = read.table('data.txt', header = T) 

Nếu bạn đã cột tên là x và y, bạn có thể giải quyết chúng như thế này:

df$x 
df$y 

Nếu bạn muốn thực sự xóa t đầu tiên anh chèo từ một data.frame, bạn có thể sử dụng chỉ số tiêu cực như thế này:

df = df[-1,] 

Nếu bạn muốn xóa một cột từ một data.frame, bạn có thể gán NULL với nó:

Dưới đây là một số ví dụ đơn giản về cách để tạo ra và thao tác một data.frame trong R:

# create a data.frame with 10 rows 
> x = rnorm(10) 
> y = runif(10) 
> df = data.frame(x, y) 

# write it to a file 
> write.table(df, 'test.txt', row.names = F, quote = F) 

# read a data.frame from a file: 
> read.table(df, 'test.txt', header = T) 

> df$x 
[1] -0.95343778 -0.63098637 -1.30646529 1.38906143 0.51703237 -0.02246754 
[7] 0.20583548 0.21530721 0.69087460 2.30610998 
> df$y 
[1] 0.66658148 0.15355851 0.60098886 0.14284576 0.20408723 0.58271061 
[7] 0.05170994 0.83627336 0.76713317 0.95052671 

> df$x = x 
> df 
      y   x 
1 0.66658148 -0.95343778 
2 0.15355851 -0.63098637 
3 0.60098886 -1.30646529 
4 0.14284576 1.38906143 
5 0.20408723 0.51703237 
6 0.58271061 -0.02246754 
7 0.05170994 0.20583548 
8 0.83627336 0.21530721 
9 0.76713317 0.69087460 
10 0.95052671 2.30610998 

> df[-1,] 
      y   x 
2 0.15355851 -0.63098637 
3 0.60098886 -1.30646529 
4 0.14284576 1.38906143 
5 0.20408723 0.51703237 
6 0.58271061 -0.02246754 
7 0.05170994 0.20583548 
8 0.83627336 0.21530721 
9 0.76713317 0.69087460 
10 0.95052671 2.30610998 

> df$x = NULL 
> df 
      y 
1 0.66658148 
2 0.15355851 
3 0.60098886 
4 0.14284576 
5 0.20408723 
6 0.58271061 
7 0.05170994 
8 0.83627336 
9 0.76713317 
10 0.95052671 
+3

Tôi không chắc chắn nếu nó rõ ràng để @akz: trong 'header = T'' T' là viết tắt của 'TRUE', vì vậy tham số này cho R để tải tiêu đề. Xem '? Read.table' để biết chi tiết. – daroczig

+0

Lưu ý rằng nếu bạn có một khung dữ liệu cột đơn thì vui lòng xem câu trả lời này - https://stackoverflow.com/a/3232770/4606130 nơi bạn sẽ cần một 'drop = FALSE' khi chỉ mục tiêu cực – micstr

21

Bạn có thể sử dụng chỉ mục tiêu cực để loại bỏ hàng, ví dụ:

dat <- dat[-1, ] 

Dưới đây là một ví dụ:

> dat <- data.frame(A = 1:3, B = 1:3) 
> dat[-1, ] 
    A B 
2 2 2 
3 3 3 
> dat2 <- dat[-1, ] 
> dat2 
    A B 
2 2 2 
3 3 3 

Điều đó nói rằng, bạn có thể có vấn đề hơn là chỉ xóa bớt những nhãn mà đã kết thúc trên hàng 1. Có nhiều khả năng R đã giải thích dữ liệu dưới dạng văn bản và từ đó được chuyển đổi thành các yếu tố. Kiểm tra những gì str(foo), trong đó foo là đối tượng dữ liệu của bạn, nói về các loại dữ liệu.

Có vẻ như bạn chỉ cần header = TRUE trong cuộc gọi của bạn để đọc trong các dữ liệu

+0

hoàn toàn đúng Gavin. Đó là cái đầu = FALSE đã cho nó. – akz

11

Không ai có thể thực sự muốn loại bỏ một hàng. Vì vậy, nếu bạn đang tìm kiếm một cái gì đó có ý nghĩa, đó là lựa chọn có điều kiện

#remove rows that have long length and "0" value for vector E 

>> setNew<-set[!(set$length=="long" & set$E==0),] 
+0

Đây là một trả lời cho một câu hỏi không được hỏi.Tôi nghĩ nó khó hiểu hơn là giúp đỡ. –

3

dat <- dat[-1, ] làm việc nhưng nó giết dataframe của tôi, thay đổi nó thành loại khác. Thay vào đó, phải sử dụng dat <- data.frame(dat[-1, ]) nhưng đây có thể là trường hợp đặc biệt vì khung dữ liệu này ban đầu chỉ có một cột.

+0

Đây là một bình luận, không phải là một câu trả lời! Mặc dù vậy tôi không thể tái tạo. –

3

Tôi không phải là chuyên gia, nhưng điều này có thể làm việc là tốt,

dat <- dat[2:nrow(dat), ] 
+0

Trên thực tế điều này không hoạt động khi 'nrow (dat) == 1': Sau đó, dat gốc được giữ nguyên. –

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