簡體   English   中英

加入並匹配R中的兩個數據框

[英]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.

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