在R语言中聚合列表内连续重复的字符串
聚合列表中连续重复的客户活动
基础R实现:用rle()函数处理
R内置的rle()函数专门用于识别并处理连续重复值,完全匹配你的需求。通过lapply()遍历customers列表的每个子元素,对每个客户的活动序列应用rle()后提取values字段,就能得到去重后的连续活动序列。
示例代码:
# 处理customers列表,合并连续重复的活动 cleaned_customers <- lapply(customers, function(activity_seq) { rle_result <- rle(activity_seq) rle_result$values }) # 查看第一个客户处理后的结果 cleaned_customers[[1]]
运行后第一个客户的活动会从"StartPage", "ClickItem1", "ClickItem1", "ClickItem1", "ScrollItem1"变为"StartPage", "ClickItem1", "ScrollItem1",完全符合你的要求。
扩展方案:用dplyr处理(适合后续数据分析)
如果需要将数据转换为数据框进行更多操作,可以先把列表转成结构化数据,再通过分组过滤去除连续重复项:
示例代码:
library(dplyr) # 将列表转换为包含客户ID和活动的数据框 customer_data <- tibble( customer_id = rep(1:length(customers), sapply(customers, length)), activity = unlist(customers) ) # 按客户分组,过滤掉与上一条重复的活动 cleaned_data <- customer_data %>% group_by(customer_id) %>% filter(activity != lag(activity, default = "")) %>% ungroup() # 可选:转换回原始列表格式 cleaned_customers_list <- split(cleaned_data$activity, cleaned_data$customer_id)
内容的提问来源于stack exchange,提问作者marius89
相关产品推荐
相关产品推荐

