![](/img/trans.png)
[英]Create a table based on filtering dataframe on progressive criteria with two variables in R
[英]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.