gpt4 book ai didi

python - 基于现有 ID 创建唯一、可传递 ID 的最简单方法

转载 作者:太空宇宙 更新时间:2023-11-04 09:30:56 25 4
gpt4 key购买 nike

假设我有一个如下所示的数据集:

obs id1 id2
1 a 1
2 b 2
3 c 2
4 d 3
5 e 4
6 b 5
7 f 6

我想为这个数据集创建一个唯一的transitive id 变量。 id1id2 都用于识别个人。因此,如果个体 X 与个体 Y 具有相同的 id1 相同的 id2作为个体 Y,然后是 X=Y

因此,在此示例中,预期的输出将如下所示:

obs id1 id2 uniqid
1 a 1 1
2 b 2 2
3 c 2 2
4 d 3 3
5 e 4 4
6 b 5 2
7 f 6 5

这里,观察6id1“b”,它已经被分配了uniqid 2(通过观察2),因此,观察 6 识别出与观察 2 相同的个体。

现在,比较观察 36,我们看到这些观察既不共享 id1 也不共享 id2,但仍然识别出同一个人,因为它们都将同一个人识别为观察 2

我目前在 Stata 工作,我想知道最好的方法是什么。我更喜欢基于 Stata 的解决方案,但我也有兴趣查看 R 或 Python 解决方案。

最佳答案

community-contributed Stata 命令 group_id 可以满足您的需求。

但是,它保留不匹配的标识符不变:

clear
input obs str1 id1 id2
1 a 1
2 b 2
3 c 2
4 d 3
5 e 4
6 b 5
7 f 6
end

clonevar id = id2
group_id id, match(id1)
sort obs

list, separator(0)

+----------------------+
| obs id1 id2 id |
|----------------------|
1. | 1 a 1 1 |
2. | 2 b 2 2 |
3. | 3 c 2 2 |
4. | 4 d 3 3 |
5. | 5 e 4 4 |
6. | 6 b 5 2 |
7. | 7 f 6 6 |
+----------------------+

这是另一个例子,可以看出情况确实如此:

clear
input obs str1 id1 id2
1 a 1
2 b 2
3 c 7
4 d 3
5 e 4
6 b 5
7 f 1
end

clonevar id = id2
group_id id, match(id1)
sort obs

list, separator(0)

+----------------------+
| obs id1 id2 id |
|----------------------|
1. | 1 a 1 1 |
2. | 2 b 2 2 |
3. | 3 c 7 7 |
4. | 4 d 3 3 |
5. | 5 e 4 4 |
6. | 6 b 5 2 |
7. | 7 f 1 1 |
+----------------------+

如果你想在匹配后有连续的标识符(即 5 而不是第一个示例中的 6 和第二个示例中的 7 ),您将必须手动调整它们。

关于python - 基于现有 ID 创建唯一、可传递 ID 的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55776776/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com