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

在R中使用dplyr统计两变量首次出现(排除变量相等情形)

用dplyr实现IPC与2IPC首次出现的标记

当然可以用dplyr完美替代Excel的COUNTIFS来搞定这个需求!而且代码逻辑更清晰,还能轻松处理更大的数据集,比手动在Excel里写函数省心多了。

核心逻辑拆解

我们要实现的效果是:

  • 排除IPC与2IPC取值完全相同的案例(这类行的occurrence直接设为0)
  • 对于IPC和2IPC不同的组合,标记该组合首次出现的行为1,后续重复出现的行为0

完整代码实现

假设你的原始数据框名为df,直接运行下面的代码就能生成目标occurrence列:

library(dplyr)

df <- df %>%
  # 第一步:先把IPC和2IPC相同的行直接标记为0,其他先设为NA留待后续处理
  mutate(occurrence = ifelse(IPC == 2IPC, 0, NA)) %>%
  # 第二步:按IPC和2IPC的组合分组,对未标记的行判断是否是首次出现
  group_by(IPC, 2IPC) %>%
  mutate(occurrence = ifelse(is.na(occurrence), 
                             ifelse(row_number() == 1, 1, 0), 
                             occurrence)) %>%
  # 取消分组,避免后续操作受分组影响
  ungroup()

代码解释

  1. 初始标记:用ifelse直接把IPC和2IPC相等的行的occurrence设为0,其他行暂时设为NA,这样我们只需要处理剩下的行。
  2. 分组标记首次出现:通过group_by(IPC, 2IPC)把相同组合的行归为一组,然后用row_number()判断是否是组内第一行——第一行设为1,其余设为0。
  3. 取消分组:最后用ungroup()取消分组,确保后续对数据框的操作不受分组限制。

验证示例数据

把你提供的示例数据代入这段代码,得到的occurrence列会和你用Excel生成的完全一致,比如:

  • 1968年的(G01S, Na)组合首次出现,标记为1;1969年再次出现时标记为0
  • 所有IPC和2IPC相同的行(比如1971年的(G01S, G01S))都被标记为0

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:41:52