首页 > 解决方案 > 有没有办法比较两个数据框中具有不同列号的列并删除与某一列不匹配的行?

问题描述

我有 2 个数据框:all_species(155 obs,1 var)和all_taxa(33124 obs,8 个变量)。我想要做的是在列中找到存在于all_species$species列中的观察结果all_taxa$species,并且只将这些观察结果保留在all_taxa数据框中,从而产生 155 个 obs 的 8 个变量。

到目前为止我所做的是创建 2 个向量:

species_vector_2 <- as.vector(all_species$Species)
all_taxa_vector <- as.vector(all_taxa $Species)

然后我使用以下代码来确定是否species_vector_2存在于all_taxa_vector

all_taxa %in% species_vector_2

输出给了我一长串TRUEFALSE值。我想要的是FALSE从数据框中删除值all_taxa。所以我试图索引数据框:

all_taxa[(all_taxa_vector %in% species_vector_2)]

这给了我以下错误:

Error: Length of logical index vector for `[` must equal number of columns (or 1):
* `.data` has 8 columns
* Index vector has length 33124
Call `rlang::last_error()` to see a backtrace

所以我的问题是,有没有办法根据我想要索引的特定列(all_taxa$species)来索引它。

理想的解决方案将导致all_taxa数据框仅包含来自 的物种all_species$species,同时保留 中存在的其他变量all_taxa。因此all_taxa将有 155 个观察值和 8 个变量。

all_species数据框

                 Species
1         Ichthyomyzon castaneus
2            Ichthyomyzon fossor
3         Ichthyomyzon unicuspis
4           Lethenteron appendix
5             Petromyzon marinus
6           Oreochromis niloticus

all_taxa数据框

SpecCode Species                 Genus        Subfamily           Family        Order       Class         SuperClass 
     <dbl> <chr>                   <chr>        <chr>               <chr>         <chr>       <chr>         <chr>      
1        2 Oreochromis niloticus   Oreochromis  Pseudocrenilabrinae Cichlidae     Perciformes Actinopteryg~ Osteichthy~
2        3 Oreochromis mossambicus Oreochromis  Pseudocrenilabrinae Cichlidae     Perciformes Actinopteryg~ Osteichthy~
3        4 Engraulis ringens       Engraulis    Engraulinae         Engraulidae   Clupeiform~ Actinopteryg~ Osteichthy~
4        5 Orthopristis chrysopte~ Orthopristis Haemulinae          Haemulidae    Perciformes Actinopteryg~ Osteichthy~
5        6 Coryphaena hippurus     Coryphaena   NA                  Coryphaenidae Perciformes Actinopteryg~ Osteichthy~
6        7 Coryphaena equiselis    Coryphaena   NA                  Coryphaenidae Perciformes Actinopteryg~ Osteichthy~

标签: r

解决方案


如果没有可重复的数据集,很难确定,但我认为这应该可行:

library("tidyverse")

all_taxa %>% 
    filter(species %in% unique(all_species$species))

推荐阅读