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

在R中计算焦点实例前的唯一值:生成response1与response2变量

生成response1和response2变量的解决方案

测试数据

"dyad"指讨论帖子(post)中进行对话的两人组(每行代表一条消息),观测值按时间顺序排列。

structure(list(post = c(1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3), 
    dyad = c("111_222", "111_222", "111_222", "222_345", "333_567", 
    "333_899", "333_990", "435_123", "435_555", "435_123", "435_111", 
    "435_555")), class = "data.frame", row.names = c(NA, -12L
), codepage = 65001L)

需求说明

需要创建两个变量:

  • response1:同一post中,当前行之前出现的、与当前dyad不同的唯一dyad的数量。
  • response2:当前dyad在同一post中的出现顺序(按时间排序)。

期望输出

+------+---------+-----------+-----------+
| post | dyad    | response1 | response2 |
+------+---------+-----------+-----------+
| 1    | 111_222 | 0         | 1         |
+------+---------+-----------+-----------+
| 1    | 111_222 | 0         | 2         |
+------+---------+-----------+-----------+
| 1    | 111_222 | 0         | 3         |
+------+---------+-----------+-----------+
| 1    | 222_345 | 1         | 4         |
+------+---------+-----------+-----------+
| 2    | 333_567 | 0         | 1         |
+------+---------+-----------+-----------+
| 2    | 333_899 | 1         | 2         |
+------+---------+-----------+-----------+
| 2    | 333_990 | 2         | 3         |
+------+---------+-----------+-----------+
| 3    | 435_123 | 0         | 1         |
+------+---------+-----------+-----------+
| 3    | 435_555 | 1         | 2         |
+------+---------+-----------+-----------+
| 3    | 435_123 | 1         | 3         |
+------+---------+-----------+-----------+
| 3    | 435_111 | 2         | 4         |
+------+---------+-----------+-----------+
| 3    | 435_555 | 2         | 5         |
+------+---------+-----------+-----------+ 

解决方案

使用dplyr包可以快速实现需求,代码如下:

library(dplyr)

# 加载测试数据
df <- structure(list(post = c(1, 1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3), 
                     dyad = c("111_222", "111_222", "111_222", "222_345", "333_567", 
                              "333_899", "333_990", "435_123", "435_555", "435_123", "435_111", 
                              "435_555")), class = "data.frame", row.names = c(NA, -12L
                              ), codepage = 65001L)

# 生成目标变量
df_result <- df %>%
  group_by(post) %>%
  mutate(
    # response2:同一post内的时间顺序行号
    response2 = row_number(),
    # response1:当前行前出现的、与当前dyad不同的唯一dyad数量
    response1 = sapply(row_number(), function(i) {
      prev_dyads <- dyad[1:(i-1)]
      length(unique(prev_dyads[prev_dyads != dyad[i]]))
    })
  ) %>%
  ungroup()

# 输出结果
print(df_result, row.names = FALSE)

运行代码后得到的结果与期望输出完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 01:13:26