查找重复次数最多的值序列

编程入门 行业动态 更新时间:2024-10-22 22:51:12
本文介绍了查找重复次数最多的值序列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

假设我有一个数据框,如下所示

ITEM 1 X 2 A 3 B 4 C 5 A 6 F 7 U 8 A 9 B 10 C 11 F 12 U

如何获取‘Item’列中最常见的值序列?在这种情况下,最频繁的序列将是A, B, C,因为它出现在第2行到第4行以及第8行到第10行。

我已经尝试了rle函数,以及这里找到的一些解决方案,但我一直不幸运。我能有一个建议、提示或套餐推荐吗?

推荐答案

Atidyverse解决方案与嵌套的apply函数混合。该解决方案是泛化的,将报告至少出现两次的最频繁的非平凡连续序列--平局转到较长的序列。

library(tidyverse) # Data x <- data.frame(ITEM = c("X", "A", "B", "C", "A", "F", "U", "A", "B", "C", "F", "U"), stringsAsFactors = F) # convert x to vector y <- x$ITEM # Create list to check for sequence of each length 2 through n/2 l <- lapply(2:floor(length(y)/2), function(a) sapply(1:a, function(x) y[(0 + x):(length(y) - a + x)])) %>% lapply(as.data.frame) %>% setNames(sapply(2:(length(.) + 1), function(a) paste0("Consecutive", a))) # Show most frequent sequence(s), choosing the longest lapply(1:length(l), function(x) (as.data.frame(table(do.call(paste, l[[x]])), stringsAsFactors = F) %>% dplyr::mutate(length = nchar(Var1)) %>% dplyr::filter(length == max(length) & Freq == max(Freq) & Freq > 1)) ) %>% .[which(sapply(., nrow) > 0)] %>% dplyr::bind_rows() %>% dplyr::filter(Freq == max(Freq)) %>% dplyr::filter(length == max(length)) %>% dplyr::rename(Sequence = Var1) %>% dplyr::select(-length) # Sequence Freq #1 A B C 2

更多推荐

查找重复次数最多的值序列

本文发布于:2023-10-24 17:05:12,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1524511.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:序列   次数最多

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!