簡體   English   中英

通過匹配作為列添加的因子匹配因子級別的級別來合並兩個數據幀

[英]Merge two data frames by matching levels of factor- matching factor levels added as columns

我有兩個df。 它們的行數不同,但是具有相同的列lepsp

set.seed(571) 
year = as.factor(c(rep("1998", 20), rep("1999", 16)))
lepsp = c(letters[1:20], c('a','b','c'),letters[8:20]) 
freq = rpois(36, lambda=12)
df1 <- data.frame(year, lepsp, freq)

lepsp = c(letters[1:26],c('a','b','c'),letters[1:20],c('e','f',"h")) 
plntsp = c(paste("plnt", sep= "_", letters[1:26]), 
      paste("plnt",sep="_",letters[1:20]),
      paste("plnt",sep="_",letters[18:23])) 
df2 <- data.frame(lepsp, plntsp)

我想匹配lepsp在兩個數據幀和添加一列(S)到df1指定每個plntsp與每個相關聯的lepsp 每個唯一的plntsp需要合並為一個新列。 如果沒有關聯的工廠,則這些條目可以保留為空白。 新的df應該如下所示:

df <- data.frame(lepsp=unique(c(letters[1:5],letters[14:18])),  
          plntsp1=c("","","plnt_a","plnt_b","plnt_c","","","","",""),
          plntsp2=c("","","", "plnt_c","plnt_d","","","","",""))

過去我曾使用它進行匹配,但是不確定如何調整它,以便將plntsp每個級別都添加為新列。

 df1$plntsp<-df2$plntsp[match(df1$lepsp, df2$lepsp)]

您可以使用dplyr::left_join加入df1df2 匯總數據以進行leapsp 最后,在多個列中使用splitstackshape::cSplit分隔plntsp為:

library(tidyverse)
library(splitstackshape)

left_join(df1, df2, by="lepsp") %>%
  select(lepsp, plntsp) %>%
  distinct() %>%
  group_by(lepsp) %>%
  summarise(plntsp = toString(plntsp)) %>%
  ungroup() %>%
  cSplit("plntsp")

#    lepsp plntsp_1 plntsp_2 plntsp_3
# 1:     a   plnt_a   plnt_d       NA
# 2:     b   plnt_b   plnt_e       NA
# 3:     c   plnt_c   plnt_f       NA
# 4:     d   plnt_d   plnt_g       NA
# 5:     e   plnt_e   plnt_h   plnt_u
# 6:     f   plnt_f   plnt_i   plnt_v
# 7:     g   plnt_g   plnt_j       NA
# 8:     h   plnt_h   plnt_k   plnt_w
# 9:     i   plnt_i   plnt_l       NA
# 10:     j   plnt_j   plnt_m       NA
# 11:     k   plnt_k   plnt_n       NA
# 12:     l   plnt_l   plnt_o       NA
# 13:     m   plnt_m   plnt_p       NA
# 14:     n   plnt_n   plnt_q       NA
# 15:     o   plnt_o   plnt_r       NA
# 16:     p   plnt_p   plnt_s       NA
# 17:     q   plnt_q   plnt_t       NA
# 18:     r   plnt_r       NA       NA
# 19:     s   plnt_s       NA       NA
# 20:     t   plnt_t       NA       NA

注意:創建數據框時,請使用stringsAsFactors = FALSE參數,以避免不必要的警告。

暫無
暫無

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

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