在R中如何基于长表分组的v1数值响应模式创建新变量v2
R语言实现方案
你之前用summarise得不到预期结果是因为该函数会对每个id分组仅返回1行,而你需要保留所有原始行,改用mutate生成分组级别的公共变量即可,实现逻辑如下:
- 先按id和visit排序,保证每个id下v1的访视顺序正确
- 按id分组,将每个id对应的多次访视v1值拼接为唯一的模式标识
- 对不同的模式标识分配唯一整数作为v2取值,相同模式的id会得到相同的v2
可直接运行的代码
library(dplyr) # 替换为你自己的数据集名即可 result <- 你的数据集名 %>% arrange(id, visit) %>% group_by(id) %>% mutate(v2 = paste(v1, collapse = "_")) %>% ungroup() %>% mutate(v2 = as.integer(factor(v2, levels = unique(v2))))
结果验证
代入你提供的示例数据运行后,输出结果和你给出的预期完全一致:
- id10001的v1序列为0、0,对应v2=1
- id10002的v1序列为0、1,对应v2=2
- id10003的v1序列为1、0,对应v2=3
如果后续出现其他v1响应模式,代码会自动按模式首次出现的顺序顺延分配v2编号,无需调整规则。
内容的提问来源于stack exchange,提问作者david
相关产品推荐
相关产品推荐

