Если мы хотим получить количество множественных значений, тогда используйте map
library(tidyverse)
map(c("V1", "V4", "V9"), ~
malardf %>%
group_by(malaordens.Order) %>%
summarise(!! .x := sum(str_count(malar_names,
pattern = .x)))) %>%
reduce(inner_join, by = "malaordens.Order")
# A tibble: 1 x 4
# malaordens.Order V1 V4 V9
# <chr> <int> <int> <int>
#1 Amphipoda 2 0 2
Обратите внимание, что проблема ОП в коде при подсчете одного шаблона также связана с извлечением целого столбца(malardf$
) после выполнения group_by
.В mutate/summarise
нет необходимости использовать data$
, вместо этого просто передайте имя столбца без кавычек.Он будет работать неизменно с группой или без операции
data
malardf <- structure(list(malar_names = c("Protomima imitatrix V1 V9",
"Caprella danilevskii V1 V9",
"Caprella andreae", "Caprella andreae", "Caprella andreae", "Caprella andreae"
), malaordens.Order = c("Amphipoda", "Amphipoda", "Amphipoda",
"Amphipoda", "Amphipoda", "Amphipoda")), class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6"))