如何在分组内堆叠数据集,使观测仅关联同组其他观测而非自身
问题:同国家组内观测互相关联(排除自身)
背景
此前已提问过如何让每个观测关联除自身外的所有其他观测,现在数据集包含国家维度,需要仅让同国家组内的观测互相关联,禁止跨组关联。
示例数据集
df <- data.frame(id1 = c("A","A","A","B","B","B"), id2 = c("a", "b", "c", "a", "b", "c" ), x1 = c(1,2,3,1,2,3))
原始数据集输出:
id1 id2 x1 1 A a 1 2 A b 2 3 A c 3 4 B a 1 5 B b 2 6 B c 3
其中id1代表国家,id2代表人员标识,需求为:每个人员仅关联同国家内的其他人员,且排除自身关联。
尝试过的代码
- 代码1:
df <- df %>% group_by(id1) %>% merge( df, by = NULL) %>% filter(id2.x != id2.y)
- 代码2:
df <- df %>% group_by(id2) %>% left_join(df, df, by = character()) %>% filter(id2.x != id2.y)
遇到的问题
运行上述代码后出现了跨国家组的关联(例如B国的b关联了A国的a),不符合需求。
期望输出
id1.x id2.x x1.x id1.y id2.y x1.y 1 A a 1 A b 2 2 A a 1 A c 3 3 A b 2 A a 1 4 A b 2 A c 3 5 A c 3 A a 1 6 A c 3 A b 2 7 B a 1 B b 2 8 B a 1 B c 3 9 B b 2 B a 1 10 B b 2 B c 3 11 B c 3 B a 1 12 B c 3 B b 2
即A、B两国各自内部的人员两两关联,不跨组,也不关联自身。
内容的提问来源于stack exchange,提问作者Victor Shin
相关产品推荐
相关产品推荐

