R - Поиск отсутствующих элементов в повторной серии - PullRequest
0 голосов
/ 31 августа 2018

Как вы находите записи, которые (как и ожидалось) должны присутствовать в кадре данных, но не существуют? Моя, вероятно, тривиальная проблема похожа на этот вопрос , но с одним или двумя дополнительными слоями - каждое решение, которое я пробовал, терпит неудачу из-за повторений и нарушений в наборе.

# Over some years, with a few skipped...
yrs <- 1985:2018 
yrs <- yrs[-sample(1:length(yrs),5)]
# at a number of plots, replicated over two transects...
pts <- letters[1:10]
lns <- c('N','S')
# a study was done (data fields omitted):
yrsr <- rep(yrs, each= length(lns)*length(pts))
lnsr <- rep(rep(lns, each=length(pts)), times=length(yrs))
ptsr <- rep(rep(pts, times=length(lns)), times=length(yrs))
study <- data.frame(YEAR=yrsr, LINE=lnsr, PLOT=ptsr)
## But for random reasons certain plots got left out.
studym <- study[-sample(1:nrow(study), 23),]
# NB: The number of entries per plot varies:
studym$SPEC <- sample(c(1,1,1,1,1,2,2,2,3), nrow(studym), replace=TRUE)
studyAll <- studym[rep(row.names(studym), studym$SPEC),]

Пропущенные графики могли быть законными нулями или ошибками ввода данных или чем-то еще; они должны быть отслежены и либо исправлены, либо вставлены как NA. Поэтому, чтобы найти их в исходных таблицах данных, мне нужен список ... всех элементов, которые не существуют в studyAll ... Из моего запуска здесь это будет что-то вроде

# 1985 N d
# 1985 N g
# ...
# 2017 S g

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

studyAll %>% group_by(YEAR, LINE) %>% count(PLOT) %>% apply(2, table)

но это просто говорит мне, сколько у меня каждой проблемы, а не где ее найти.

(Бонусный вопрос: есть ли способ построить study более непосредственно из yrs, pts и lns, без этих трех строк rep()? Я полагаю, что должен быть какой-то способ генерировать такая простая иерархия, но не может ее найти.)

1 Ответ

0 голосов
/ 31 августа 2018

Один из способов найти недостающие данные в факториальном проекте - это создать все комбинации ГОД, ЛИНИЯ И УЧАСТОК из StudyAll, а затем найти Разница между всеми комбинациями и записанными наблюдениями в вашем исследовании. Все данные. через anti_join.

library("tidyr")
library("dplyr")

 studyMissing <- studyAll %>%
   expand(YEAR, LINE, PLOT) %>%
   anti_join(studyAll, by = c("YEAR", "LINE", "PLOT"))

# Giving
# A tibble: 23 x 3 
#    YEAR LINE  PLOT 
#   <int> <fct> <fct>
# 1  1985 N     f    
# 2  1986 N     h    
# 3  1986 S     g    
# 4  1992 N     h    
# 5  1996 S     g    
# 6  2001 N     e    
# 7  2001 N     i    
# 8  2002 N     c    
# 9  2002 S     g    
#10  2003 N     h    
## ... with 13 more rows
...