You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何按站点唯一日期统计访问次数,排除捕获类型干扰

按站点+唯一日期统计访问次数问题

需要新增一列,按站点分组统计唯一访问次数,但当前方法因存在new和recapture两种capture_type,会将同一日期的不同记录计为独立访问(例如admin_pond站点2022-05-19的recapture记录被标记为visit_4,实际应统一标记为visit_3)。要求实现同一站点+同一日期的所有记录共享同一个visit编号,不受capture_type影响。

示例数据

data <- structure(list(site = c("admin_pond", "admin_pond", "admin_pond", 
"admin_pond"), date = structure(c(19123, 19130, 19131, 19131), class = "Date"), 
    n = c(9L, 15L, 11L, 9L), capture_type = c("new", "new", "new", 
    "recapture")), row.names = c(NA, -4L), class = c("tbl_df", 
"tbl", "data.frame"))

当前方法的问题

当前代码仅按site分组后用1:n()生成编号,会把同一日期的不同capture_type记录当成独立访问,导致编号错误:

bull_frog_visits <- data %>% 
  group_by(site) %>% 
  mutate(n_visit = 1:n(),
         n_visit = paste0("visit_", n_visit, sep = ""))

head(bull_frog_visits)

解决方案

方法一:使用dense_rank()直接生成编号

利用dense_rank()对组内的date进行排序,相同日期会得到相同的排名,直接生成统一的visit编号:

bull_frog_visits <- data %>% 
  group_by(site) %>% 
  mutate(n_visit = paste0("visit_", dense_rank(date)))

# 查看结果
bull_frog_visits

方法二:先构建日期-编号映射表再合并

先提取每个站点的唯一日期并生成编号,再通过关联合并回原数据,逻辑更直观:

# 构建站点-日期的访问编号映射表
visit_map <- data %>% 
  distinct(site, date) %>% 
  group_by(site) %>% 
  mutate(n_visit = paste0("visit_", row_number()))

# 合并到原数据
bull_frog_visits <- data %>% 
  left_join(visit_map, by = c("site", "date"))

# 查看结果
bull_frog_visits

两种方法都能实现需求:admin_pond站点2022-05-19的两条记录会统一标记为visit_3,同一日期的访问不会因capture_type被拆分。

内容的提问来源于stack exchange,提问作者Eizy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 08:42:42