Объединение наборов данных без потери данных - PullRequest
0 голосов
/ 17 мая 2018

У меня есть несколько наборов данных с различными численными наблюдениями видов в определенных точках. Но если вид не наблюдался в какой-либо точке, то эта точка не существует в данных для этого вида. Я хочу объединить эти наборы данных, чтобы я мог анализировать состав видов в каждой точке, но хочу, чтобы значение 0 было введено, если вид не наблюдался в этой точке.

Не уверен, как это сделать. Попытка с использованием функции слияния, но если в этой точке нет наблюдений в одном из наборов данных вида, точка теряется.

Вид 1:

Point, Species1
1, 19
3, 12
4, 11
6, 23

Виды 2:

Point, Species2
2, 10
3, 20
5, 12
6, 25

Желаемый результат:

Point, Species1, Species2
1, 19, 0
2, 0, 10
3, 12, 20
4, 11, 0
5, 0, 12
6, 23, 25

Ответы [ 2 ]

0 голосов
/ 17 мая 2018

Вам просто нужно merge с all=True

s=merge(df1,df2,on='Point',all=T)
s[is.na(s)]=0
s
  Point Species1 Species2
1     1       19        0
2     2        0       10
3     3       12       20
4     4       11        0
5     5        0       12
6     6       23       25
0 голосов
/ 17 мая 2018

Вы можете использовать dplyr::full_join():

require(tidyverse)

df1 <- data.frame(Point = c(1,3,4,6), Species1 = c(19,12,11,23))
df2 <- data.frame(Point = c(2,3,5,6), Species2 = c(10,20,12,25))

df1 %>% 
  full_join(df2) %>% 
  replace_na(list(Species1=0, Species2=0)) %>%
  arrange(Point)

  Point Species1 Species2
1     1       19        0
2     2        0       10
3     3       12       20
4     4       11        0
5     5        0       12
6     6       23       25
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...