Xem chức năng all()
và any()
cho các bộ phận đầu tiên và thứ hai của câu hỏi của bạn tương ứng. Có thể sử dụng chức năng apply()
để chạy các hàm trên hàng hoặc cột. (MARGIN = 1
là các hàng, MARGIN = 2
là các cột, v.v ...). Lưu ý tôi sử dụng apply()
trên df[, -1]
để bỏ qua biến số id
khi thực hiện so sánh.
Phần 1:
> df <- data.frame(id=c(1:5), v1=c(0,15,9,12,7), v2=c(9,32,6,17,11))
> df[apply(df[, -1], MARGIN = 1, function(x) all(x > 10)), ]
id v1 v2
2 2 15 32
4 4 12 17
Phần 2:
> df[apply(df[, -1], MARGIN = 1, function(x) any(x > 10)), ]
id v1 v2
2 2 15 32
4 4 12 17
5 5 7 11
Để xem những gì đang xảy ra, x > 10
trả về một vector logic cho mỗi hàng (thông qua apply()
cho biết mỗi phần tử là lớn hơn 10 . all()
trả về TRUE
nếu tất cả các yếu tố của vé vào là TRUE
và FALSE
nếu không.trả lại TRUE
nếu bất kỳ của các yếu tố trong đầu vào là TRUE
và FALSE
nếu tất cả là FALSE
.
sau đó tôi sử dụng vector logic phát sinh từ việc apply()
gọi
> apply(df[, -1], MARGIN = 1, function(x) all(x > 10))
[1] FALSE TRUE FALSE TRUE FALSE
> apply(df[, -1], MARGIN = 1, function(x) any(x > 10))
[1] FALSE TRUE FALSE TRUE TRUE
để tập hợp con df
(như hình trên).
+1 - và thay thế 'tất cả' bằng' bất kỳ' cho câu hỏi thứ hai. – flodel
chờ, bạn muốn làm 'tất cả (hàng [-1]> 10)' không tính đến cột 'id'. Hoặc áp dụng hàm trên 'df [-1]'. – flodel