r - 识别具有重复测量且多年之间具有相同 ID 的对象

标签 r classification repeat difference

我想用连续的字母对数据框中某些个体的姓名进行重新分类,并且重新分类标准必须更改自个体第一次出现以来的每个 X 间隔。我用一个例子更好地解释它。

ID <- c(1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 1, 2, 6, 8, 12, 7, 15, 16, 17, 18, 19, 20, 1, 21, 22, 19 )
Year <- c (1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 5, 6, 6, 6)
df <- data.frame (ID, Year)
df

我有一个数据集,其中包含 6 年来对某些人的重复测量。正如你所看到的一些IDs就像 "1" or "8" Year == 1,2,3,4,5 中重复对于ID == 1Year == 2,4对于ID == 8 。然而不同的人可能有相同的ID如果自某个个体第一次出现以来已经发生了一段时间。这是因为我们认为个体每两年就会死亡一次,而ID可以重复使用。

在这个假设的情况下,我们假设个体的生命周期是 2 年,并且我们可以在采样过程中完美地识别不同的个体。 ID == 1Year == 1Year == 2代表同一个人,但是 ID == 1Year == 1,2 , Year == 3,4Year == 5代表不同的个体。这是因为 ID == 1 的个体来自Year == 1活不了那么久。问题是,个体的第一次出现可能会发生在不同的年份,并且会像本例一样重复出现。所以代码必须忘记 ID自第一次出现后每两年一次,将新出现的事件分类为新个体。

我想为每个人命名一个独特的 ID 。新名称不必按时间顺序排列,如 ID == 1 所示。在 Year == 5 。我只希望他们能有一个独特的名字。

下面我已经给出了预期的结果。

ID <- c(1, 2, 3, 4, 5, 6, 7, 1, 2, 3, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 1, 2, 6, 8, 12, 7, 15, 16, 17, 18, 19, 20, 1, 21, 22, 19 )
Year <- c (1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 5, 1, 6, 6, 6)
new_ID <- c("A", "B", "C", "D", "E", "F", "G", "A", "B", "C", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "M", "N", "Q", "S", "L", "T", "U", "V", "W", "X", "Y", "Z", "CC", "AA", "BB", "Y")
new_df <- data.frame (ID, Year, new_ID)
new_df

如您所见 ID == 1有不同new_IDYear == 1 Year == 4Year == 5 ,因为我们假设如果一个个体第一次出现在Year == 1中, Year == 3 中具有相同 ID 的个人是不同的,并且与 Year == 5 中出现的个体相同。 。

提前致谢。

最佳答案

您可以使用dplyrcut:

library(dplyr)
df %>% group_by(ID) %>%
       mutate(x = as.numeric(cut(Year, seq(min(Year)-1, max(Year)+1, 2))),
              idout = paste0(ID, ".", x))

   ID Year x idout
1   1    1 1   1.1
2   2    1 1   2.1
3   3    1 1   3.1
4   4    1 1   4.1
5   5    1 1   5.1
6   6    1 1   6.1
7   7    1 1   7.1
8   1    2 1   1.1
9   2    2 1   2.1
10  3    2 1   3.1
11  8    2 1   8.1
12  9    2 1   9.1
13 10    2 1  10.1
14 11    2 1  11.1
15 12    2 1  12.1
16  1    3 2   1.2
17  2    3 2   2.2
18  3    3 2   3.2
19  4    3 2   4.2
20  5    3 2   5.2
21  6    3 2   6.2
22  1    4 2   1.2
23  2    4 2   2.2
24  6    4 2   6.2
25  8    4 2   8.2
26 12    4 2  12.2
27  7    5 3   7.3
28 15    5 1  15.1
29 16    5 1  16.1
30 17    5 1  17.1
31 18    5 1  18.1
32 19    5 1  19.1
33 20    5 1  20.1
34  1    5 3   1.3
35 21    6 1  21.1
36 22    6 1  22.1
37 19    6 1  19.1

注意,与您所需的输出有两个不匹配之处:第 34 行和第 15,26 行,其中您在第 2 年和第 4 年有一个具有相同 ID 的 L。我认为这些都是错误?

关于r - 识别具有重复测量且多年之间具有相同 ID 的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32310520/

相关文章:

r - 在数据框中查找子集并写入结果

tensorflow - Tf.Print() 不打印张量的形状?

machine-learning - 将分类数据输入分类器

javascript 两种颜色重复效果

html - 单元格表格中的翻转图像覆盖先前的单元格图像 - 表格中的重复图像

r - 如何在具有丰度数据的表上进行 PCA,但将其与 R 中站点的环境参数向量叠加?

r - 从包含变音符号的 csv 创建 RSQLite - 然后使用 dplyr 读入

r - 两个数值向量的两两相减和给定范围内的结果选择

android - 使用 opencv 进行图像分类

ios - UILocalNotification 2 分钟后重复提醒