Hãy xem xét các yếu tố sau đâyĐếm số "0" trong yếu tố này
x = factor(c("1|1","1|0","1|1","1|1","0|0","1|1","0|1"))
Tôi muốn đếm số lần xuất hiện của nhân vật "0" trong yếu tố này. Giải pháp duy nhất tôi đã tìm thấy cho đến nay là
sum(grepl("0",strsplit(paste(sapply(x, as.character), collapse=""), split="")[[1]]))
# [1] 4
Giải pháp này có vẻ rất phức tạp cho quá trình đơn giản như vậy. Có một lựa chọn tốt hơn? (Như quá trình này sẽ được lặp lại khoảng 100.000 lần vào các yếu tố có độ dài 2000 thành phần, tôi có thể kết thúc quan tâm đến hiệu suất là tốt.)
Nếu bạn đang làm việc trên một vectơ rất lớn, bạn có thể tiết kiệm thời gian bằng cách hoạt động trên 'cấp' của' x' chỉ - 'sum (nchar (gsub (" [^ 0] "," " , cấp độ (x))) * tabulate (x)) ' – thelatemail
@thelatemail thanks. Thật tuyệt vời khi biết. Nó đánh bại mọi thứ – Sathish
Điều quan trọng là 'gsub' chỉ phải hoạt động trên' length (levels (x)) 'thay vì' length (x) '- regex là khá chuyên sâu trong trường hợp này. Có nói tất cả điều đó, nó vẫn còn khá nhanh chóng để xử lý các bản ghi 10M trong <15 giây. – thelatemail