Rozważmy następujący czynnikLicząc liczbę „0” tego czynnika
x = factor(c("1|1","1|0","1|1","1|1","0|0","1|1","0|1"))
chciałbym policzyć liczbę wystąpień znaku „0” tego czynnika. Jedynym rozwiązaniem znalazłem tak daleko jest
sum(grepl("0",strsplit(paste(sapply(x, as.character), collapse=""), split="")[[1]]))
# [1] 4
To rozwiązanie wydaje się bardzo skomplikowane dla takiego prostego procesu. Czy istnieje "lepsza" alternatywa? (Jako że proces zostanie powtórzony około 100.000 razy na czynnikach, które są 2000 elementy długo, mogę skończyć dbając o wydajność, jak również.)
Jeśli pracujesz na bardzo dużym wektorze, możesz zaoszczędzić czas operując na 'poziomach' tylko 'x' - sum (nchar (gsub (" [^ 0] "," " , levels (x))) * tabulate (x)) ' – thelatemail
@mail podziękowania. To było cudowne wiedzieć. To wszystko bije – Sathish
Kluczem jest to, że 'gsub' musi działać tylko na' length (levels (x)) 'zamiast' length (x) '- regex jest dość intensywny w tym przypadku wydaje się. Powiedziawszy to wszystko, nadal jest dość szybko przetwarzać rekordy 10M w <15 sekund. – thelatemail