创建一个数据帧,它是来自其他数据帧 R 的向量之间差异的结果

Create a dataframe that is the result of a difference between vectors from other dataframes R

我有以下数据集和信息:首先,我有 i 个不同的图要分析。在每个地块中,我有 j 个物种,我想获取一些信息,例如:

plot1 = c(rep(1, 3), rep(2, 4), rep(3, 5))
spp1 = c('a', 'b', 'c', 'a', 'b', 'c', 'd', 'b', 'b', 'b', 'e', 'f')
data.1 = data.frame(plot1, spp1)

上述信息在第二个类似结构的数据帧中重复:

plot2 = c(rep 1, 2), rep(2, 3), rep(3, 5))
spp2 = c('a', 'a', 'b', 'c', 'c', 'b', 'b', 'b', 'e', 'f'))
data.2 = data.frame(plot2, spp2)

我想要做的是,对于每个 i 图,setdiff(unique(data.1$spp1), unique(data.2$spp2)) 并将获得的信息添加到具有 2 列的数据框中:图和 spp_name

对于示例数据集,我想获得最终数据框,例如:

df_result = data.frame(plot = c(1,1,2,2,3), spp_name = ('b','c','a','d',0)

0(或类似)必须在 setdiff(unique()) returns 'character(0)' 时返回,所以,在某种程度上,我的 df_result 需要有,对于每个i plot,长度等于data.1$spp1和data.2$spp2之间setdiff字符串的个数。

我做的第一件事是基于每个 i 图使用 for 循环。获得 setdiff() 字符串结果是可以的,但我不知道如何将此信息添加到空数据框......我需要为每个物种循环一些东西吗?我真的希望我的问题是可以理解的。

已经谢谢了

您可以使用 anti_join 并为缺失值添加行:

library(dplyr)

anti_join(data.1, data.2, by = c("plot1" = "plot2", "spp1" = "spp2")) %>% 
  add_row(plot1 = setdiff(data.1$plot1, .$plot1))

#  plot1 spp1
#1     1    b
#2     1    c
#3     2    a
#4     2    d
#5     3 <NA>