Tôi muốn đặt (lọc) một khung dữ liệu bằng cách chỉ định các hàng không (!
) để giữ trong khung dữ liệu mới. Đây là một mẫu dataframe đơn giản:Tập dữ liệu con bằng nhiều điều kiện lô hàng hợp lý để xóa
data
v1 v2 v3 v4
a v d c
a v d d
b n p g
b d d h
c k d c
c r p g
d v d x
d v d c
e v d b
e v d c
Ví dụ, nếu một hàng cột v1 có một "b", "d" hoặc "e", tôi muốn thoát khỏi điều đó hàng quan sát, sản xuất cấu hình dữ liệu sau:
v1 v2 v3 v4
a v d c
a v d d
c k d c
c r p g
Tôi đã thành công khi subsetting dựa trên một điều kiện tại một thời điểm. Ví dụ: tại đây tôi xóa các hàng có v1 chứa "b":
sub.data <- data[data[ , 1] != "b", ]
Tuy nhiên, tôi có nhiều, nhiều điều kiện như vậy, vì vậy, không nên thực hiện từng điều kiện một. Tôi đã không thành công với những điều sau đây:
sub.data <- data[data[ , 1] != c("b", "d", "e")
hoặc
sub.data <- subset(data, data[ , 1] != c("b", "d", "e"))
Tôi đã thử một số thứ khác là tốt, như !%in%
, nhưng điều đó dường như không tồn tại. Bất kỳ ý tưởng nào?
Tốt và đơn giản, cảm ơn. Tôi không chắc giải pháp nào tôi thích hơn, cái này hay giải pháp do Andrie cung cấp. Cả hai đều dễ dàng và hiệu quả. Cả ba giải pháp đều làm việc cho tôi và tôi chưa bao giờ sử dụng 'which()' trước đây. Vì vậy, nó đã được tốt đẹp để được giới thiệu với chức năng đó. – Jota
Nếu nó giúp bạn quyết định xem có sử dụng 'tập hợp con' hay '[', hãy xem cảnh báo trong trợ giúp cho '? Tập hợp con': *" Đây là một chức năng tiện lợi được dùng để tương tác. Đối với lập trình tốt hơn là sử dụng các hàm subsetting tiêu chuẩn như [, và đặc biệt việc đánh giá phi tiêu chuẩn của tập con đối số có thể có hậu quả không lường trước được. "* – Andrie
@Andrie Cảm ơn bạn đã thêm làm rõ. – chl