本文介绍了查找重复次数最多的值序列的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
假设我有一个数据框,如下所示
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更多推荐
查找重复次数最多的值序列
发布评论