Assume two datasets A and B:
X1<- c('a', 'b','c')
place<-c('andes','brooklyn', 'comorin')
A<-data.frame(X1,place)
X2<-c('a','a','a','b','c','c','d')
place2<-c('andes','alamo','andes','brooklyn','comorin','camden','dover')
B<-data.frame(X2,place2)
I want to count how many times each word in A$place occurs in B$place2.
CodePudding user response:
Use str_detect from the stringr package.
library(stringr)
sapply(A$place, function(x) sum(str_detect(x, B$place2)))
andes brooklyn comorin
2 1 1
CodePudding user response:
A possible solution:
library(tidyverse)
A %>%
rowwise %>%
mutate(n = sum(place == B$place2)) %>%
ungroup
#> # A tibble: 3 × 3
#> X1 place n
#> <chr> <chr> <int>
#> 1 a andes 2
#> 2 b brooklyn 1
#> 3 c comorin 1
CodePudding user response:
table(B$place2[B$place2 %in% A$place])
# andes brooklyn comorin
# 2 1 1
CodePudding user response:
Here's a base R version of user438383's answer.
sapply(A$place, function(y) sum(grepl(y, B$place2)))
andes brooklyn comorin
2 1 1
The key functionality is sapply() which repeats an operation over all elements of a vector, grepl() which checks the matches and generates TRUE or FALSE, and sum(). When you sum a logical vector, you get the count of TRUE.
