在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
相关产品推荐
相关产品推荐

