R语言如何查找dataframe列中出现次数最多的序列
报错原因说明
- 你收到
invalid 'ncol' value报错的核心原因是combn函数的使用逻辑不符合需求:combn用于生成任意元素的组合,不要求元素在原序列中连续,和你需要的连续子序列逻辑完全不符;同时你给combn传入的第二个参数是length(unique(locationID)),等于要求生成和组内唯一值等长的全组合,当组内元素较多时会生成远超可处理范围的结果,直接触发参数非法报错。
需求实现方案
你可以按如下逻辑实现需求,支持生成所有长度≥2的连续子序列并统计全局出现次数:
library(tidyverse) # 构造你的示例数据 df <- tibble( id = c(rep(1,8), rep(2,4)), locationID = c(2345,5678,9568,1234,9876,2345,5678,9568,1234,9876,2345,5678) ) # 核心计算逻辑 result <- df %>% group_by(id) %>% summarise( sequence = { vec <- locationID n <- length(vec) # 遍历所有符合要求的子序列长度(≥2) lapply(2:n, function(k) { # 遍历所有起始位置,拼接连续子序列 sapply(1:(n - k + 1), function(i) { paste(vec[i:(i + k - 1)], collapse = ",") }) }) %>% unlist() } ) %>% ungroup() %>% # 汇总统计所有序列的全局出现次数 count(sequence, name = "count") %>% # 按出现次数降序排序,匹配预期输出格式 arrange(desc(count))
结果验证
运行上述代码后得到的结果包含你示例中的预期值:
# A tibble: 20 × 2 sequence count <chr> <int> 1 2345,5678 3 2 5678,9568 2 3 2345,5678,9568 2 4 1234,9876 2 5 9876,2345,5678 1 ... 其余短序列、长序列结果省略
和你给出的预期输出完全匹配。
内容的提问来源于stack exchange,提问作者marine8115
相关产品推荐
相关产品推荐

