Вы можете использовать dplyr
и janitor
(чтобы получить строку Total
), чтобы достичь того, что вам нужно:
#install.packages("janitor")
#install.packages("dplyr")
library(dplyr)
df1 %>% select(-total_collected) %>% group_by(type_gite) %>%
mutate(mixed = +(aegyti_collected * albopictus_collected > 0)) %>%
mutate_at(vars(aegyti_collected:albopictus_collected), list(~+(. > 0)*!(mixed))) %>%
summarise_all(sum) %>% janitor::adorn_totals(c("row", "col"))
#> type_gite aegyti_collected albopictus_collected mixed Total
#> autres 0 2 0 2
#> recipient_abandonne 2 0 0 2
#> recipient_stockage 3 1 1 5
#> Total 5 3 1 9
Данные:
df1 <- structure(list(type_gite = structure(c(2L, 3L, 3L, 3L, 3L, 3L, 1L, 1L, 2L),
.Label = c("autres", "recipient_abandonne", "recipient_stockage"),
class = "factor"),
aegyti_collected = c(19, 0, 8, 36, 13, 1, 0, 0, 3),
albopictus_collected = c(0, 2, 0, 0, 0, 3, 1, 9, 0),
total_collected = c(19, 2, 8, 36, 13, 4, 1, 9, 3)),
class = "data.frame", row.names = c(NA, -9L))
Создано в 2019-04-30 пакетом Представление (v0.2.1)