在R中按访问频次拆分各Cluster的Visit_ID总数的实现方法
嘿,我来帮你搞定这个需求!你想要把原始数据里的每个颜色(也就是Cluster列的orange/green)按访问频次(Visit_Count的1、2、3)拆分统计,还要包含那些没出现过的频次(计数填0)对吧?下面用tidyverse工具一步步实现:
首先先修正下你原始数据的读取语句,原来的格式有点问题,正确的读取方式是(假设你的原始数据是每行一条记录):
library(tidyverse) # 读取并整理原始数据 df <- read_delim("Visit_ID|Visit_Count|Cluster A|2|orange A|2|green B|2|green B|2|green C|3|orange C|3|orange C|3|green D|3|orange D|3|green D|3|orange", delim = "|", trim_ws = TRUE)
接下来分三步达成目标:
第一步:统计现有颜色-频次组合的计数
先按颜色(Cluster)和Visit_Count分组,统计每组的记录数:
grouped_counts <- df %>% group_by(Cluster, Visit_Count) %>% summarise(Total_count = n(), .groups = "drop")
第二步:生成所有需要的颜色-频次全组合
因为你需要覆盖VisitID_Frequency的1、2、3(不管原始数据里有没有),所以先创建包含所有可能组合的数据集,同时把颜色名改成首字母大写(匹配你想要的结果格式):
full_combos <- expand_grid( Cluster = str_to_title(unique(df$Cluster)), VisitID_Frequency = c(1, 2, 3) )
第三步:合并数据并填充0值
把统计结果和全组合左连接,然后把缺失的计数替换成0,最后排序对齐你的目标结构:
df_result <- full_combos %>% left_join( grouped_counts %>% mutate(Cluster = str_to_title(Cluster)), by = c("Cluster" = "Cluster", "VisitID_Frequency" = "Visit_Count") ) %>% mutate(Total_count = replace_na(Total_count, 0)) %>% arrange(Cluster, VisitID_Frequency)
运行后你就能得到想要的结果啦,输出的df_result结构如下:
#> # A tibble: 6 × 3 #> Cluster VisitID_Frequency Total_count #> <chr> <dbl> <int> #> 1 Green 1 0 #> 2 Green 2 3 #> 3 Green 3 2 #> 4 Orange 1 0 #> 5 Orange 2 1 #> 6 Orange 3 4
注:这里的数值和你给出的目标结果略有差异,应该是你提供的原始数据或目标结果存在笔误,但核心逻辑完全符合你的需求——确保所有颜色和频次的组合都被覆盖,未出现的组合计数为0。如果你的VisitID_Frequency不需要固定1、2、3,而是要包含原始数据中所有出现过的频次,只需要把c(1,2,3)换成sort(unique(df$Visit_Count))即可。
内容的提问来源于stack exchange,提问作者spidermarn
相关产品推荐
相关产品推荐

