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

如何用tidyr或dplyr统计事件间各转换组合的实例数?

用dplyr统计事件序列的转换次数

当然可以用dplyr轻松实现,完全不用写循环,步骤清晰高效:

首先加载dplyr包:

library(dplyr)

然后对现有数据做处理:

existing_df <- data.frame (person  = c("john", "john", "jane","jane","jane"),
                  event = c("skate", "sit", "walk","skate","sit"),
                  sequenceNum = c(1,2,1,2,3)
                  )

result_df <- existing_df %>%
  # 按人员分组,确保只在同一个人的事件序列里计算转换关系
  group_by(person) %>%
  # 用lead()函数获取当前事件的下一个事件,作为目标事件
  mutate(target = lead(event)) %>%
  # 过滤掉每个人员序列的最后一行(没有后续事件,target为NA)
  filter(!is.na(target)) %>%
  # 按源事件和目标事件分组,统计转换次数
  group_by(event, target) %>%
  summarise(value = n(), .groups = "drop") %>%
  # 把event列重命名为source,匹配目标格式
  rename(source = event)

print(result_df)

运行后得到的结果和你想要的desired_df完全一致:

# A tibble: 2 × 3
  source target value
  <chr>  <chr>  <int>
1 skate  sit        2
2 walk   skate      1

每一步的逻辑:

  • 先按人员分组,保证转换关系只在同一个人的事件序列内计算
  • lead()是dplyr的窗口函数,专门用来取同组内下一行的值,正好对应事件的“下一步”
  • 过滤NA是因为每个序列的最后一个事件没有后续,不需要统计
  • 最后按源事件和目标事件分组计数,就得到了各转换的次数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 00:17:23