У меня есть следующие наборы данных и информация: во-первых, у меня есть я разных графиков, которые я хочу проанализировать. На каждом участке у меня есть виды Дж, по которым я хочу получить некоторую информацию, например:
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)
Что я пытаюсь сделать, так это для каждого графика яsetdiff(unique(data.1$spp1), unique(data.2$spp2))
и добавить полученную информацию в фрейм данных, который имеет 2 столбца: plot и spp_name
Для примеров наборов данных я хотел бы получить окончательный фрейм данных, например:
df_result = data.frame(plot = c(1,1,2,2,3), spp_name = ('b','c','a','d',0)
0 (или аналогичный) должен быть возвращен, когда setdiff(unique()) возвращает 'character (0)'. Таким образом, мой df_result
должен иметь для каждого графика я длину, равную количеству строк setdiff между данные.1$spp1 и данные.2$spp2.
Первое, что я сделал, это использовал цикл 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>
Да, должно работать нормально.
Спасибо, я попробовал, и это сработало. Еще вопрос: некоторые виды повторяются на одном участке. Где лучше всего добавить в код функцию unique(), чтобы отфильтровать эти повторения?
Спасибо! И если я хочу сделать setdiff(data.2$plot2, data1$plot1), все, что мне нужно изменить, это команда addrow? Или мне нужно также изменить порядок anti_join?