簡體   English   中英

根據兩個標准分配漸進式 ID

[英]Assign progressive ID based on two criteria

我有兩列關於我研究中參與者的 ID。 ID包含數字的漸進順序,因為主題都是不同的人。 第二列new_ID包含有關哪些 ID 對應於同一個人的信息。 不幸的是,它們不是按漸進順序排列的。

ID <- c(1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6)
new_ID <- c(8, 8, 8, 8, 10, 10, 10, 10, 10, 10, 8, 8, 8, 8, 8, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 10, 10, 10, 10, 10, 10, 10)

data.frame(ID, new_ID)

#   ID  new_ID
#1   1       8
#2   1       8
#3   1       8
#4   1       8
#5   2      10
#6   2      10
#7   2      10
#8   2      10
#9   2      10
#10  2      10
#11  3       8
#12  3       8
#13  3       8
#14  3       8
#15  3       8
#16  4       4
#17  4       4
#18  4       4
#19  4       4
#20  4       4
#21  4       4
#22  5       5
#23  5       5
#24  5       5
#25  5       5
#26  6      10
#27  6      10
#28  6      10
#29  6      10
#30  6      10
#31  6      10
#32  6      10

我在下面報告了我想要實現的目標,即根據前兩列中的信息分配新 ID ( final_ID )。 任何幫助將不勝感激(最好使用dplyr )!


#   ID new_ID ID_final
#1   1      8        1
#2   1      8        1
#3   1      8        1
#4   1      8        1
#5   2     10        2
#6   2     10        2
#7   2     10        2
#8   2     10        2
#9   2     10        2
#10  2     10        2
#11  3      8        1
#12  3      8        1
#13  3      8        1
#14  3      8        1
#15  3      8        1
#16  4      4        4
#17  4      4        4
#18  4      4        4
#19  4      4        4
#20  4      4        4
#21  4      4        4
#22  5      5        5
#23  5      5        5
#24  5      5        5
#25  5      5        5
#26  6     10        2
#27  6     10        2
#28  6     10        2
#29  6     10        2
#30  6     10        2
#31  6     10        2
#32  6     10        2

這也是一個data.table解決方案。

編輯:應 OP 的要求,也添加了dplyr解決方案。

library(data.table)
ID <- c(1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 6, 6, 6)
new_ID <- c(8, 8, 8, 8, 10, 10, 10, 10, 10, 10, 8, 8, 8, 8, 8, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 10, 10, 10, 10, 10, 10, 10)

d <- data.table(ID, new_ID)
d[, ID_final := min(.SD[,ID]), new_ID]
d
#>     ID new_ID ID_final
#>  1:  1      8        1
#>  2:  1      8        1
#>  3:  1      8        1
#>  4:  1      8        1
#>  5:  2     10        2
#>  6:  2     10        2
#>  7:  2     10        2
#>  8:  2     10        2
#>  9:  2     10        2
#> 10:  2     10        2
#> 11:  3      8        1
#> 12:  3      8        1
#> 13:  3      8        1
#> 14:  3      8        1
#> 15:  3      8        1
#> 16:  4      4        4
#> 17:  4      4        4
#> 18:  4      4        4
#> 19:  4      4        4
#> 20:  4      4        4
#> 21:  4      4        4
#> 22:  5      5        5
#> 23:  5      5        5
#> 24:  5      5        5
#> 25:  5      5        5
#> 26:  6     10        2
#> 27:  6     10        2
#> 28:  6     10        2
#> 29:  6     10        2
#> 30:  6     10        2
#> 31:  6     10        2
#> 32:  6     10        2
#>     ID new_ID ID_final

library(dplyr)
df <- data.frame(ID, new_ID)
df <- df %>% group_by(new_ID)  %>%
  mutate(ID_final = min(ID))
df
#> # A tibble: 32 x 3
#> # Groups:   new_ID [4]
#>       ID new_ID ID_final
#>    <dbl>  <dbl>    <dbl>
#>  1     1      8        1
#>  2     1      8        1
#>  3     1      8        1
#>  4     1      8        1
#>  5     2     10        2
#>  6     2     10        2
#>  7     2     10        2
#>  8     2     10        2
#>  9     2     10        2
#> 10     2     10        2
#> # ... with 22 more rows

代表 package (v0.3.0) 於 2019 年 9 月 30 日創建

您要做的是為每個 new_ID 找到正確的 ID,然后加入該映射。

final_id_map <- df %>% group_by(new_ID) %>% summarise(ID_final=min(ID))
> final_id_map
# A tibble: 4 x 2
  new_ID ID_final
   <dbl>    <dbl>
1      4        4
2      5        5
3      8        1
4     10        2

然后你可以做一個

df %>% join(final_id_map)

生產所需的 output。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM