Làm cách nào để xóa hàng đầu tiên của khung dữ liệu trong R?


85

Tôi có một tập dữ liệu với 11 cột với hơn 1000 hàng mỗi cột. Các cột được gắn nhãn V1, V2, V11, v.v. Tôi đã thay thế 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 ra rằng hàng 1 cũng chứa các 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.

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

Câu trả lời:


139

Giữ các nhãn từ tệp gốc của bạn như sau:

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

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

df$x
df$y

Nếu bạn thực sự muốn xóa hàng đầu tiên khỏi data.frame, bạn có thể sử dụng các chỉ số phủ định như sau:

df = df[-1,]

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

df$x = NULL

Dưới đây là một số ví dụ đơn giản về cách tạo và thao tác với 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 đối với @akz: trong header=Tnhững Tđại diện cho TRUE, vì vậy tham số này nói với R để tiêu đề tải. Xem ?read.tableđể biết chi tiết.
daroczig

Lưu ý rằng nếu bạn có một khung dữ liệu cột duy nhất sau đó hãy nhìn vào câu trả lời này - stackoverflow.com/a/3232770/4606130 nơi bạn sẽ cần một drop = FALSEcũng như khi tiêu cực indexing
micstr

28

Bạn có thể sử dụng lập chỉ mục phủ định để loại bỏ các hàng, ví dụ:

dat <- dat[-1, ]

Đâ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ể gặp nhiều vấn đề hơn là chỉ xóa các nhãn kết thúc ở hàng 1. Khi đó nhiều khả năng R đã diễn giải dữ liệu dưới dạng văn bản và do đó được chuyển đổi thành các thừa số. Kiểm tra đối tượng dữ liệu của bạn str(foo)ở đâu foo, nói gì về các loại dữ liệu.

Có vẻ như bạn chỉ cần header = TRUEtrong cuộc gọi của mình để đọc dữ liệu (giả sử bạn đọc nó qua read.table()hoặc một trong các trình bao bọc của nó).


13

Không ai có thể thực sự muốn loại bỏ hàng một. Vì vậy, nếu bạn đang tìm kiếm thứ 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),]

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

12

Mặc dù tôi đồng ý với câu trả lời được bình chọn nhiều nhất, đây là một cách khác để giữ tất cả các hàng ngoại trừ hàng đầu tiên:

dat <- tail(dat, -1)

Điều này cũng có thể được thực hiện bằng cách sử dụng dplyrgói của Hadley Wickham .

dat <- dat %>% slice(-1)

7

Tôi không phải là chuyên gia, nhưng điều này cũng có thể hiệu quả,

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

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

6

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


Đâ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.
U. Windl
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.