You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何逐行比对数据框字符串列与列表列并统计出现频次?

解决Tibble中逐行统计字符串在对应列表列中出现次数的问题

你需要在tibble里逐行统计V1列的字符串在对应行V2列表中的出现次数并生成V3列,之前使用的matches <- x[!x$V1 %in% x$V2]逻辑有误:该代码是将整个V1列与所有行V2列表的合并集合做匹配,而非逐行对应检查,因此得到空数据框。

数据构造代码

df <- tibble::tribble(
        ~V1,                                                    ~V2,
  "oranges", c("oranges", "apples", "berries", "plums", "cherries"),
   "apples", c("oranges", "apples", "berries", "bananas", "apples"),
   "grapes", c("oranges", "apples", "berries", "plums", "cherries"),
  "berries", c("berries", "apples", "berries", "plums", "cherries"),
  )

正确实现方法

方法1:用dplyr逐行处理

通过rowwise()指定逐行操作,再用sum()统计匹配次数:

library(dplyr)

df <- df %>%
  rowwise() %>%
  mutate(V3 = sum(V2 == V1)) %>%
  ungroup()

方法2:用purrr批量处理

map2_int()可同时遍历V1和V2的每一组对应元素,直接返回整数结果:

library(purrr)
library(dplyr)

df <- df %>%
  mutate(V3 = map2_int(V1, V2, ~sum(.y == .x)))

运行结果

处理后的数据框与你给出的示例一致:

# A tibble: 4 × 3
  V1      V2                                                                 V3
  <chr>   <chr>                                                           <int>
1 oranges c("oranges", "apples", "berries", "plums", "cherries")             1
2 apples  c("oranges", "apples", "berries", "bananas", "apples")             2
3 grapes  c("oranges", "apples", "berries", "plums", "cherries")             0
4 berries c("berries", "apples", "berries", "plums", "cherries")             2

内容的提问来源于stack exchange,提问作者Munrock

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 20:54:18