R:按组在%运算符中比较条目

时间:2018-02-01 16:29:37

标签: r dplyr

在R中工作,我有一个数据框( species_A ),其中包含几年内观察到的物种以及许多其他信息。我有第二个数据框( species_B ),其中有物种和它们被采样的个别年份。

我想比较物种_A和物种_B,以便物种_A只包含在相应年份的物种_B中列出的物种。

这就是我的数据:

Species_A:

ID__ | __species _____________ | ___年

1 ___ | __Diatoma vulgaris _______ | ___ 2005

2 ___ | __Diatoma vulgaris _______ | ___ 2006

3 ___ | __Nitzschia dissipata _____ | ___ 2006

4 ___ | __Nitzschia palea ________ | ___ 2007

数据帧种类_B以相同的方式构造,但不包含物种_A的所有行。

这是我想出的代码,如果我只想比较物种_A中是否包含物种_A的种类。但是,我想按年份对物种进行分组,然后比较数据帧。

species_A <- species_A[ species_A$species %in% species_B$species, ]

这可以通过dplyr完成吗?

2 个答案:

答案 0 :(得分:0)

  

这可以通过dplyr完成吗?

不确定。

set.seed(256)
library(dplyr)

specA <- 
  data.frame(id = 1:10, 
             spec = sample(LETTERS[1:5], 10, TRUE), 
             year = sample(c(2000:2005), 10, TRUE)) %>%
  mutate()

specB <- 
  data.frame(id = 1:10, 
             spec = sample(LETTERS[1:5], 10, TRUE), 
             year = sample(c(2000:2005), 10, TRUE))

specA %>%
  inner_join(specB, by = c("spec", "year"))

答案 1 :(得分:0)

如果想进行视觉比较,您应该查找子设置。使用虹膜数据集,这是解决问题的方法:

iris[iris$Species == "setosa",]

这将获得Species等于setosa的所有行。这是更先进的“d子集化

的基础

现在我们创建第二个列表来复制您的问题:

other_list <- iris[iris$Species %in% c("setosa", "virginica"),]

现在我们根据另一个过滤原始列表:

iris[iris$Species %in% other_list$Species,]