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

如何用R检测字符列中活动链的模式及出现频率?

解决活动链子模式频率统计的问题

看起来你已经发现了单纯用count()统计单个活动的局限性——没法捕捉到活动序列里有意义的连续模式,比如包含adpt的前后活动组合。下面我给你两种在R里实现的方案,分别用tidyverse和base R,你可以根据自己的习惯选择:

方法一:用tidyverse工具链(推荐,代码更直观)

首先我们需要把每个单元格里的活动链拆成单独的活动元素,然后生成所有可能的连续子序列,最后统计频率。如果只想关注包含adpt的模式,还可以加个过滤步骤。

library(tidyverse)

# 假设你的数据框叫df,先处理活动链拆分
df_processed <- df %>%
  mutate(activity_list = str_split(leg_activity, ", ")) # 注意分隔符是逗号+空格,和你的数据格式匹配

# 定义函数:输入活动向量,返回所有长度≥2的连续子序列字符串
get_all_subsequences <- function(vec) {
  n <- length(vec)
  subsequences <- list()
  # 可以调整len的范围,比如只统计长度2到5的子模式,避免生成过多数据
  for (len in 2:n) {
    for (start in 1:(n - len + 1)) {
      end <- start + len - 1
      subseq_str <- paste(vec[start:end], collapse = ", ")
      subsequences[[length(subsequences) + 1]] <- subseq_str
    }
  }
  return(subsequences)
}

# 生成所有子序列并统计频率
pattern_counts <- df_processed %>%
  mutate(subsequences = map(activity_list, get_all_subsequences)) %>%
  unnest(subsequences) %>%
  # 如果只关注包含adpt的模式,就打开下面这行注释
  # filter(str_detect(subsequences, "adpt")) %>%
  count(subsequences, name = "freq") %>%
  arrange(desc(freq))

# 查看结果
head(pattern_counts)

方法二:用Base R实现(无需额外安装包)

如果不想加载tidyverse,用base R也能完成同样的工作:

# 拆分每个活动链为向量列表
df$activity_list <- strsplit(df$leg_activity, ", ")

# 生成所有长度≥2的连续子序列
all_subseq <- unlist(lapply(df$activity_list, function(vec) {
  n <- length(vec)
  # 同样可以调整len的范围,比如2:5
  unlist(lapply(2:n, function(len) {
    sapply(1:(n - len + 1), function(start) {
      paste(vec[start:(start + len - 1)], collapse = ", ")
    })
  }))
}))

# 统计频率并转成数据框
pattern_counts_base <- as.data.frame(table(all_subseq), stringsAsFactors = FALSE) %>%
  rename(subsequences = all_subseq, freq = Freq) %>%
  arrange(desc(freq))

# 查看结果
head(pattern_counts_base)

注意事项

  • 如果你的活动链非常长,生成所有可能的子序列会占用大量内存,这时候建议限制子序列的长度(比如只统计2到5个活动组成的模式),修改代码里len的循环范围即可。
  • 确保你的分隔符和数据里的一致——你的示例数据是逗号加空格,所以用", "作为拆分符,如果数据里是纯逗号,就改成","。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 19:42:31