在新列中填充循环计数

Populating for loop counts in new column

我正在尝试计算 df1 的 A 列中的每一行值出现在 df2 的 B 列中的次数,然后将相应的计数填充到 df1 的新列中。

df1

ColumnA  
A_10   
A_11
A_12
A_13
A_14

df2

ColumnB
A_10, A_50
A_10, A_50
A_14, A_50
A_50, A_10

期望输出

ColumnA  New_Column
A_10      3
A_11      0
A_12      0
A_13      0
A_14      1

我的代码:

df1$new_column <- 0

for (i in df1$ColumnA) {
   df$new_column[i] <- sum(grepl(i, df2$ColumnB), na.rm = TRUE)
  }

一整天都在绞尽脑汁,包括查看论坛问题 - 我在这里做错了什么?

我们可以用逗号拆分 df2 中的数据,count 每个单独的条目并将其与 df1 连接。我们将 NA 值替换为 0.

library(dplyr)
library(tidyr)

df2 %>%
  separate_rows(ColumnB, sep = ',\s*') %>%
  count(ColumnB) %>%
  right_join(df1, by = c('ColumnB' = 'ColumnA')) %>%
  mutate(n = replace_na(n, 0))

#  ColumnB     n
#  <chr>   <dbl>
#1 A_10        3
#2 A_14        1
#3 A_11        0
#4 A_12        0
#5 A_13        0

并使用 grepl :

df1$New_Column <- sapply(df1$ColumnA, function(x) sum(grepl(x, df2$ColumnB)))