[英]Join and match two data frames in R
我有兩個數據框。 第一個數據框包括:四列 1) ID、2) 站點、3) 深度和 3) 密度。 第二個數據框由 3 列組成:1) ID,2) 站點和 3) 選擇(即最喜歡的站點)。
df1
ID Site Depth Density
1 B 0.1 0
2 C 0.2 0
3 C 0.2 1
4 A 0.05 0
5 A 0.05 1
6 B 0.1 1
7 B 0.1 2
8 B 0.1 3
9 D 0.3 0
10 C 0.2 2
11 D 0.3 1
12 D 0.3 2
13 D 0.3 3
14 D 0.3 4
15 D 0.3 5
DF 2
ID Site Choices
1 A No
1 B Yes
1 C No
1 D No
2 A No
2 B No
2 C Yes
2 D No
3 A No
3 B No
3 C Yes
3 D No
4 A Yes
4 B No
4 C No
4 D No
我正在嘗試向 df2 添加一列,當 ID 選擇其最喜歡的站點時,該列具有每個站點的每個 ID 的密度。
所需 Output:
ID Site Depth Density Choice
1 A 0.05 0 No
1 B 0.1 0 Yes
1 C 0.2 0 No
1 D 0.3 0 No
2 A 0.05 0 No
2 B 0.1 1 No
2 C 0.2 0 Yes
2 D 0.3 0 No
3 A 0.05 0 No
3 B 0.1 0 No
3 C 0.2 1 Yes
3 D 0.3 0 No
4 A 0.05 0 Yes
4 B 0.1 1 No
4 C 0.2 2 No
4 D 0.3 0 No
df2解釋:ID 1選擇B站時,A、B、C、D站密度為0。ID 2選擇C時,A站密度為0,B站為1,C站為0,而站點D 0。當ID 3選擇站點C時,A中的密度仍然為0(尚未有ID選擇站點A),B為1,C為1,站點D為0,依此類推。
我試過使用完全連接 function 和變異 function 但我沒有得到我想要的 output:
df3<-df2 %>%
full_join(df1, by = c("ID", "Site")) %>%
group_by(ID) %>%
mutate(Density= Density[Choice == "Yes"] ) %>%
distinct(ID, Site, .keep_all = TRUE)
我認為Density
是有多少組選擇了每個站點的運行總數。 為了計算它,我會這樣做:
df3 <- df2 %>%
full_join(df1, by = c("ID", "Site")) %>%
arrange(ID, site) %>% ## make sure IDs are in ascending order
group_by(Site) %>%
mutate(Density = cumsum(Choice == "Yes"))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.