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

基于两种不同条件使用R统计列数据的求助

解决R语言中邮件订阅状态变更统计问题

嘿,作为R新手碰到这种数据处理问题确实头疼,两周时间够磨人的了!我来帮你搞定这个需求~

首先咱们明确核心需求:

  • 新退订数:邮箱从Subscribed变为Unsubscribed的数量
  • 现有订阅数:邮箱始终保持Subscribed的数量

我推荐用dplyr包来处理,它的语法直观,很适合新手上手。下面一步步来:

步骤1:准备数据(模拟你的数据集)

先把你给的示例数据转换成R可处理的格式:

# 先加载dplyr包,如果没安装先运行 install.packages("dplyr")
library(dplyr)

# 构造示例数据集
df <- tibble(
  Email = c("fake@123", "real@123", "fake@123", "real@123"),
  Status = c("Subscribed", "Subscribed", "Unsubscribed", "Subscribed")
)

步骤2:分组处理状态

我们需要按邮箱分组,然后判断每个邮箱的状态是否变更,以及最新状态是什么:

processed_df <- df %>%
  # 按邮箱分组,让每个邮箱的状态数据聚在一起
  group_by(Email) %>%
  summarise(
    # 判断该邮箱是否有过状态变更(状态种类大于1)
    status_changed = n_distinct(Status) > 1,
    # 获取最新状态:这里默认数据是按时间先后排序的,如果你的数据有时间列,记得先按时间排序!
    # 比如如果有timestamp列,就先加一行 arrange(Email, timestamp)
    latest_status = last(Status)
  ) %>%
  # 根据条件分类
  mutate(
    category = case_when(
      # 有变更且最新状态是退订 → 新退订
      status_changed & latest_status == "Unsubscribed" ~ "新退订",
      # 无变更且始终是订阅 → 现有订阅
      !status_changed & latest_status == "Subscribed" ~ "现有订阅",
      # 其他情况(比如从退订变回订阅)可以根据你的需求调整
      TRUE ~ "其他状态变更"
    )
  )

步骤3:统计各类别数量

最后统计每个类别的邮箱数量:

count_result <- processed_df %>%
  count(category)

# 查看结果
print(count_result)

运行后你会得到和你预期一致的结果:

# A tibble: 2 × 2
  category     n
  <chr>    <int>
1 新退订        1
2 现有订阅      1

新手注意事项

  • 如果你的原始数据没有按时间排序,一定要先添加时间列(或者你有记录状态变化顺序的列),然后用arrange(Email, 时间列)排序,不然last(Status)取到的不是最新状态,结果会出错!
  • 如果还有其他状态变化场景(比如用户先退订又订阅),可以修改case_when里的条件来适配你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:35:22