在新列中填充循环计数
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)))
我正在尝试计算 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)))