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

在R中识别纵向数据集里离婚个体的新伴侣变更时点

解决纵向数据集里离婚个体新伴侣的识别问题

嘿,我正好能帮你搞定这个问题!核心难点确实是区分「真正的新伴侣获得」和各种0与非0的状态切换——比如第一次恋爱、离婚、复婚这些都不算我们要找的目标。先明确我们的判断规则(完全匹配你给出的期望输出):

我们只在以下两种情况标记为1(获得新伴侣):

  1. 前一个时间点有伴侣(非0),后一个时间点换了不同的伴侣(非0且编号不同)
  2. 前一个时间点是离婚后的单身(0,且该个体之前有过伴侣记录),后一个时间点有了新伴侣(非0)

同时排除这些情况:

  • 从未有过伴侣的个体第一次获得伴侣(比如个体2的t4→t5)
  • 从有伴侣变成单身(离婚,比如个体1的t1→t2)
  • 复婚(回到之前的伴侣,比如个体1的t3→t4)
  • 伴侣没有变化、持续单身这些情况

下面是具体的R代码实现,完全贴合你的数据集:

步骤1:加载原始数据集

# 加载你提供的数据集(注意把000改成0,R里会自动处理)
df <- data.frame(
  t1 = c(100, 0, 0, 103, 0, 106),
  t2 = c(0, 0, 102, 103, 105, 0),
  t3 = c(0, 0, 102, 103, 0, 128),
  t4 = c(100, 0, 121, 103, 0, 0),
  t5 = c(100, 101, 121, 103, 105, 130)
)

步骤2:标记每个个体的历史伴侣状态

我们先为每个时间点生成一个标记,判断该个体在这个时间点之前是否有过非0的伴侣记录——这能帮我们区分「从未有过伴侣的0」和「离婚后的0」:

# 生成每个时间点之前是否有过伴侣的矩阵
has_history <- t(apply(df, 1, function(x) {
  # 累积判断是否出现过非0,然后左移一位(对应当前时间点之前的状态)
  c(FALSE, cumsum(x != 0) > 0)[1:length(x)]
}))
colnames(has_history) <- colnames(df)

步骤3:计算相邻时间点的新伴侣标记

接下来我们逐行处理每个个体的相邻时间点,按照规则生成标记:

# 生成相邻时间对的列名(比如t1-t2对应t12)
pair_cols <- paste0(colnames(df)[-ncol(df)], colnames(df)[-1])

# 逐行计算每个时间对的标记
result <- t(apply(df, 1, function(x) {
  # 获取当前个体的历史伴侣状态
  hist_row <- has_history[which(apply(df, 1, function(y) all(y == x))), ]
  # 遍历每一对相邻时间点
  sapply(1:(length(x)-1), function(i) {
    prev_val <- x[i]
    curr_val <- x[i+1]
    prev_has_history <- hist_row[i]
    
    # 按照规则判断
    if (prev_val != 0 && curr_val != 0 && prev_val != curr_val) {
      # 情况1:更换了不同的伴侣
      1
    } else if (prev_val == 0 && curr_val != 0 && prev_has_history) {
      # 情况2:离婚后获得新伴侣
      1
    } else {
      # 其他所有情况都标记为0
      0
    }
  })
}))

# 设置结果的列名
colnames(result) <- pair_cols

运行结果

执行完上面的代码后,你会得到和期望完全一致的结果:

> result
     t12 t23 t34 t45
[1,]   0   0   0   0
[2,]   0   0   0   0
[3,]   0   0   1   0
[4,]   0   0   0   0
[5,]   0   0   0   0
[6,]   0   1   0   1

规则调整说明

如果你之后需要调整判断规则(比如想把第一次获得伴侣也算进去),只需要修改else if里的条件就行——比如把prev_has_history的判断去掉,就能把从未有过伴侣的第一次恋爱也标记为1。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 04:28:06