创建一个数据帧,它是来自其他数据帧 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>
我有以下数据集和信息:首先,我有 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>