使用因子向量对数据帧重新排序

时间:2019-07-25 09:48:54

标签: r dplyr factors forcats

我有一个包含物种名称的数据框。我想按特定顺序重新排列它们。为此,我将TAXON向量(字符)转换为一个因子。然后,我使用factor()函数重新排列了级别。然后,我已经使用order()进行了排序。有没有办法使用Tidyverse做到这一点?我已经尝试过,但是遇到了问题。一些帮助,将不胜感激。下面是代码。

fauna.I <- bone.I %>% full_join(mdmx.I, by="TAXON") %>% full_join(teeth.I, by="TAXON") %>% 
          filter(TAXON != "carnivore_large"& TAXON !="carnivore_medium"& TAXON!="carnivore_small" & TAXON!="carnivore_unknown" &
           TAXON!="mammal_unknown" & TAXON!="ungulate_large" & TAXON!="ungulate_medium_large"& TAXON !="ungulate_small_medium"&
           TAXON!="ungulate_small" & TAXON != "unidentified") %>% 
          replace_na(list(bone=0,mdmx=0,teeth=0))%>% rowwise() %>% 
          mutate(TOTAL.I=sum(c(bone,mdmx,teeth))) %>% select(TAXON,TOTAL.I)%>%
          mutate_if(is.character, as.factor) %>% mutate(pctNISP=TOTAL.I/sum(fauna.I$TOTAL.I)*100)

fauna.I$TAXON <- factor(fauna.I$TAXON, 
                 levels=c("bird_unknown","fish_unknown","Leporid_sp.","Panthera_leo_spelaeus","Panthera_pardus", "Canis_lupus", "Canis_sp.", "Vulpes_vulpes", "Crocuta_spelaea", "Hyaena_sp.", "Ursus_spelaeus", "Ursus_arctos", "Ursus_sp.","Rhino_sp.","Equus_ferus","Equus_hydruntinus","Equid_sp.","Megaloceros_giganteus", "Cervus_elaphus",
                 "Dama_dama","Capreolus_capreolus","Cervid_sp.","Bos_primigenius","Bison_priscus","Bos_Bison_sp.","Capra_ibex","Capra_caucasica","Rupicapra_rupicapra","Capra_sp.","Sus_scrofa"))

fauna.I <- fauna.I[order(fauna.I$TAXON),]

1 个答案:

答案 0 :(得分:0)

对于dplyr / tidyverse,您可以使用arrange对数据框进行排序。

接下来,要按非数字或字母顺序进行排序,您需要将该顺序添加到数据框中。 这就是您对因子所做的事情,但不如“按因子水平排列”之类的函数那么透明。

首先,因子实际上是带有标签的整数向量。对于您而言,第一级是“ bird_unkown”,第二级是“ fish_unknown”,等等。尝试以下行:

str(fauna.I$TAXON)

您看到的是带标签的整数。因此,让我们添加这些整数,它们基本上就是您的排序:

fauna.I %>% mutate(order=as.integer(TAXON)) %>%
  arrange(order)

此外,您的操作有什么问题? order是否使用标签?