我有以下資料集和資訊:首先,我有我想要分析的不同圖。在每個地塊中,我有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)
當 setdiff(unique()) 回傳 'character(0)' 時,必須回傳 0(或類似值),因此,在某種程度上,我df_result需要對于每個i繪圖,長度等于資料之間的 setdiff 字串數.1$spp1 和 data.2$spp2。
我做的第一件事是使用基于每個i繪圖的 for 回圈。獲得 setdiff() 字串結果是可以的,但我不知道如何將此資訊添加到空資料框...我需要為每個物種回圈一些東西嗎?我真的希望我的問題是可以理解的。
已經謝謝了
uj5u.com熱心網友回復:
您可以使用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>
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/446343.html
下一篇:簡單的For回圈問題
