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

在R中如何生成四项测试的执行顺序序列并统计其频率?

解决R中生成测试执行顺序并统计频率的问题

步骤1:准备数据并转换日期格式

首先确保日期列是Date类型,保证排序逻辑准确:

# 构造示例数据框(替换为你的实际数据)
df <- data.frame(
  ID = 1:4,
  `Test 1` = c("2020-5-1", "2016-1-24", "2017-4-3", "2019-8-2"),
  `Test 2` = c("2019-4-3", "2017-3-10", "2015-2-13", "2020-7-15"),
  `Test 3` = c("2020-6-2", "2018-9-17", "2020-8-19", "2013-3-1"),
  `Test 4` = c("2017-10-23", "2015-8-1", "2021-10-10", "2017-2-2"),
  stringsAsFactors = FALSE
)

# 将日期列转换为Date类型
df[, -1] <- lapply(df[, -1], as.Date)

方法1:使用tidyverse工具链

借助dplyr和tidyr处理数据,逻辑更直观:

library(tidyverse)

# 生成每个ID的执行顺序字符串,并统计频率
order_stats <- df %>%
  # 宽表转长表,拆分测试名称与对应日期
  pivot_longer(-ID, names_to = "Test", values_to = "Date") %>%
  # 提取测试名称中的数字部分
  mutate(Test_Num = str_extract(Test, "\\d")) %>%
  # 按ID分组,每组内按日期升序排序(最早执行的测试在前)
  arrange(ID, Date) %>%
  group_by(ID) %>%
  # 拼接数字得到顺序字符串(如"4213")
  summarise(Order = str_c(Test_Num, collapse = "")) %>%
  ungroup() %>%
  # 统计每种顺序的出现次数
  count(Order, name = "Frequency")

# 查看结果
print(order_stats)

方法2:使用Base R

无需额外安装包,直接用基础R函数实现:

# 为每个ID生成执行顺序字符串
df$Order <- apply(df[, -1], 1, function(row) {
  # 提取测试列名中的数字
  test_nums <- sub("Test ", "", names(row))
  # 按日期升序排序后拼接数字
  paste(test_nums[order(row)], collapse = "")
})

# 统计每种顺序的频率
order_stats_base <- table(df$Order)
# 转换为数据框格式方便查看
order_stats_base <- as.data.frame(order_stats_base)
colnames(order_stats_base) <- c("Order", "Frequency")

print(order_stats_base)

结果说明

两种方法都会生成包含Order(执行顺序字符串)和Frequency(出现次数)的结果表,之后你可以直接用ggplot2或基础R的hist()绘制直方图展示频率分布。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 10:15:38