簡體   English   中英

R:對於循環-對於每個子集,添加包含子集因子水平和唯一iD編號的字符值

[英]R: For loop- For each subset, add character values that incorporate the subsetted factor level and unique iD numbers

抱歉,標題太糟糕了。 但是,我很難使這個特定問題成為一個簡潔的標題。

我有一個這樣的數據框(注意:它有超過30萬個鱗翅目科,長於50000行):

df<- 
       lepfam        lep_notes                lep_species

       Geometridae                               Eois sp
       Erebidae     black/orange           
       Erebidae     black spikes           
       Erebidae     redthorax/red legs     
       Noctuidae    fuzzy/ green          
       Noctuidae    black hair/greenbody    
       Noctuidae    fuzzy/green             
       Saturnidae                                Polyphemous sp

我想通過當前數據框環df和填空題lep_species值與條件形態的物種名稱lep_notes lep_species名稱需要包括lepfam名稱和表示不同形態物種的連續數字(例如Erebidae morphosp1 )。 如果更簡單,它也可以是Erebidae 1 ,但我更喜歡“ morphosp”作為名稱的一部分。 因此,我需要通過每個唯一的lepfam子集數據。 然后,我要給lep_species名稱賦予那些目前沒有名稱但在lep_notes具有描述符的lep_notes 對於lep_notes每個唯一描述符,循環將為共享該描述符的個人指定一個唯一名稱。 數據框如下所示:

 df<- 
       lepfam     lep_notes                lep_species

       Geometridae                       Eois sp           
       Erebidae   black/orange           Erebidae_morphosp1
       Erebidae   black spikes           Erebidae_morphosp2
       Erebidae   redthorax/red legs     Erebidae_morphosp3
       Noctuidae   fuzzy/ green          Noctuidae_morphosp1
       Noctuidae   black hair/greenbody  Noctuidae_morphosp2  
       Noctuidae   fuzzy/green           Noctuidae_morphosp1 
       Saturnidae                        Polyphemous sp      

如果您可以使用dplyr並且不需要連續(盡管唯一)編號:

df %>%
  group_by(lepfam) %>% 
  mutate(lep_species=ifelse(!is.na(lep_species), lep_species, 
         paste0(lepfam, "_morphosp", rank(lep_notes, ties.method ="min"))))

       lepfam            lep_notes         lep_species
        <chr>                <chr>               <chr>
1 Geometridae                 <NA>             Eois sp
2    Erebidae         black/orange  Erebidae_morphosp2
3    Erebidae         black spikes  Erebidae_morphosp1
4    Erebidae   redthorax/red legs  Erebidae_morphosp3
5   Noctuidae          fuzzy/green Noctuidae_morphosp2
6   Noctuidae black hair/greenbody Noctuidae_morphosp1
7   Noctuidae          fuzzy/green Noctuidae_morphosp2
8  Saturnidae                 <NA>      Polyphemous sp

或連續的數字:

df %>%
  group_by(lepfam) %>% 
  mutate(lep_species=ifelse(!is.na(lep_species), lep_species,
         paste0(lepfam, "_morphosp", match(lep_notes,unique(lep_notes)))))

       lepfam            lep_notes         lep_species
        <chr>                <chr>               <chr>
1 Geometridae                 <NA>             Eois sp
2    Erebidae         black/orange  Erebidae_morphosp1
3    Erebidae         black spikes  Erebidae_morphosp2
4    Erebidae   redthorax/red legs  Erebidae_morphosp3
5   Noctuidae          fuzzy/green Noctuidae_morphosp1
6   Noctuidae black hair/greenbody Noctuidae_morphosp2
7   Noctuidae          fuzzy/green Noctuidae_morphosp1
8  Saturnidae                 <NA>      Polyphemous sp

暫無
暫無

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

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