首页 > 解决方案 > 在新列中填充循环计数

问题描述

我正在尝试计算 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)
  }

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

标签: rloopsapplygrepl

解决方案


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)))

推荐阅读