R语言:按标识符分组创建轮次列时轮次号错误求助
解决R语言按分组生成轮次列的问题
先构造一个和你场景匹配的示例数据,模拟你遇到的错误情况:
library(dplyr) df <- tibble( identifier = rep("ID1", 5), option = c("A", "B", "A", "A", "B"), # 模拟你当前得到的错误轮次 wrong_round = c(1,1,2,2,2) )
你遇到的核心问题是:检测到A和B同时出现时,立刻递增了轮次,但实际上完成轮次的那个观测应该属于当前轮,新轮次应该从下一个观测开始。
下面是修正后的代码,用dplyr实现:
df_correct <- df %>% group_by(identifier) %>% # 标记到当前行为止,是否同时出现过A和B mutate(has_A = cumsum(option == "A") > 0, has_B = cumsum(option == "B") > 0, round_complete = has_A & has_B) %>% # 关键:用lag()让轮次递增延迟到下一行 mutate(round = cumsum(lag(round_complete, default = FALSE)) + 1) %>% # 清理临时辅助列 select(-has_A, -has_B, -round_complete) # 查看结果 df_correct
运行后输出的正确结果:
# A tibble: 5 × 4 # Groups: identifier [1] identifier option wrong_round round <chr> <chr> <dbl> <dbl> 1 ID1 A 1 1 2 ID1 B 1 1 3 ID1 A 2 1 4 ID1 A 2 2 5 ID1 B 2 2
可以看到,原本错误标为2的第3行观测,现在正确归为第1轮——因为第2行才完成第一轮,新轮次从第4行才开始。
如果你的数据有多个不同的identifier,这段代码也能自动按分组处理,不需要额外调整。
内容的提问来源于stack exchange,提问作者Emine
相关产品推荐
相关产品推荐

