Если в ячейке есть несколько вхождений "g"
, как бы вы подсчитали это?Например, если есть слово с именем "ageeg"
, будет ли ему подсчитано 1 или 2?Основываясь на ответе на этот вопрос, вы можете использовать любое из следующего.
1) Если на ячейку нужно сосчитать только один "g"
df$gcount <- colSums(apply(df, 1, grepl, pattern = "g"))
df
# a b gcount
#1 abcg#g good 2
#2 gg bad 1
#3 g@ ugly 2
#4 abcdg ageeg 2
Если мы хотим избежать apply
, мы можем использовать
rowSums(sapply(df, grepl, pattern = "g"))
Или(спасибо @thelatemail)
Reduce(`+`, lapply(df, grepl, pattern ="g"))
2) Если каждый "g"
должен учитываться отдельно
df$gcount <- colSums(apply(df, 1, stringr::str_count, "g"))
df
# a b gcount
#1 abcg#g good 3
#2 gg bad 2
#3 g@ ugly 2
#4 abcdg ageeg 3
Здесь мы также можем использовать неприменимые версии
rowSums(sapply(df, stringr::str_count, "g"))
Или
Reduce(`+`, lapply(df, stringr::str_count, "g"))
data
df <- data.frame(a = c("abcg#g", "gg", "g@", "abcdg"),
b = c("good", "bad", "ugly", "ageeg"))