Использование Tidyverse для выбора уровней из одного столбца, которые отфильтрованы из другого - PullRequest
0 голосов
/ 24 мая 2019

Я пытаюсь отфильтровать набор данных, содержащий реплицированные строки, являющиеся ошибками, и удалить их.Мне удалось сделать это по-другому, но, видя силу tidyverse, я хотел бы попытаться сделать это, используя этот пакет.

таблица, с которой я работаю, состоит из данных о численности 4 видов на 3 участках (1,2,3) и каждый сайт делится на разделы (здесь с 1 по 5).Может быть только одно посещение в день, что означает, что если есть дубликаты (несколько посещений для одного и того же сайта, даты и раздела), то это ошибки, которые необходимо удалить.

Как я хочу удалить эти дубликаты,следующим образом:

  • , если для сайта и даты более одного уровня visit_id:
  • , если для visit_id i хотя бы одна строка содержит значение в столбцеитого, я хочу сохранить для этой даты и сайта все строки, которые соответствуют этому уровню посещения.
  • если для посещения_ид i, все строки содержат NA (потому что ни один из видов не наблюдался в эту конкретную дату иsite), сохранить первый уровень visit_id (первый или последний, не имеет значения, но я хочу сохранить только один уровень) -sese (есть только один visit_id), ничего не делать.

здесьданные:

dat<- data.frame(matrix(c(1,800681,1,"25-07-10",1,0,0,0,1,
             1,800681,2,"25-07-10",NA,NA,NA,NA,NA,
             1,800681,3,"25-07-10",NA,NA,NA,NA,NA,
             1,800682,1,"25-07-10",NA,NA,NA,NA,NA,
             1,800682,2,"25-07-10",NA,NA,NA,NA,NA,
             1,800682,3,"25-07-10",NA,NA,NA,NA,NA,
             1,800683,1,"25-07-10",NA,NA,NA,NA,NA,
             1,800683,2,"25-07-10",NA,NA,NA,NA,NA,
             1,800683,3,"25-07-10",NA,NA,NA,NA,NA,
             1,800684,1,"25-07-10",NA,NA,NA,NA,NA,
             1,800684,2,"25-07-10",NA,NA,NA,NA,NA,
             1,800684,3,"25-07-10",NA,NA,NA,NA,NA,
             1,800685,1,"25-07-10",NA,NA,NA,NA,NA,
             1,800685,2,"25-07-10",NA,NA,NA,NA,NA,
             1,800685,3,"25-07-10",NA,NA,NA,NA,NA,
             2,800681,1,"25-07-10",NA,NA,NA,NA,NA,
             2,800681,2,"25-07-10",NA,NA,NA,NA,NA,
             2,800682,1,"25-07-10",NA,NA,NA,NA,NA,
             2,800682,2,"25-07-10",NA,NA,NA,NA,NA,
             2,800683,1,"25-07-10",NA,NA,NA,NA,NA,
             2,800683,2,"25-07-10",NA,NA,NA,NA,NA,
             2,800684,1,"25-07-10",NA,NA,NA,NA,NA,
             2,800684,2,"25-07-10",NA,NA,NA,NA,NA,
             2,800685,1,"25-07-10",NA,NA,NA,NA,NA,
             2,800685,2,"25-07-10",NA,NA,NA,NA,NA,
             3,800681,1,"25-07-10",1,0,0,0,1,
             3,800682,2,"25-07-10",NA,NA,NA,NA,NA,
             3,800683,3,"25-07-10",NA,NA,NA,NA,NA,
             3,800684,4,"25-07-10",NA,NA,NA,NA,NA,
             3,800685,5,"25-07-10",NA,NA,NA,NA,NA), ncol=9,nrow = 30,byrow = T))

colnames(dat)=c("site","visit_id","section","visit_date","species1","species2","species3","species4","tot")

Я поиграл с фильтрами (если) и срезом, но мне не удалось вложить разные мои запросы.Любые предложения будут приветствоваться

конечный результат, который я хотел бы получить:

dat<- data.frame(matrix(c(1,800681,1,25-07-10,1,0,0,0,1,
1,800681,2,25-07-10,NA,NA,NA,NA,NA,
1,800681,3,25-07-10,NA,NA,NA,NA,NA,
2,800681,1,25-07-10,NA,NA,NA,NA,NA,
2,800681,2,25-07-10,NA,NA,NA,NA,NA,
3,800681,1,25-07-10,1,0,0,0,1,
3,800682,2,25-07-10,NA,NA,NA,NA,NA,
3,800683,3,25-07-10,NA,NA,NA,NA,NA,
3,800684,4,25-07-10,NA,NA,NA,NA,NA,
3,800685,5,25-07-10,NA,NA,NA,NA,NA), ncol=9,nrow = 10,byrow = T))

colnames(dat)<-c("site","visit_id","section","visit_date","species1","species2","species3","species4","tot")

Мне не удается смешать эти две операции.Вот что я сделал: list_visit_id = as.vector (уникальный (dat $ visit_id [! Is.na (dat $ tot)]))

здесь я просто выбираю наблюдения без ошибок:

heredat1=dat %>% group_by(site,visit_date,section)%>% filter(length(visit_id)<2)

ниже Я выбираю среди реплицированной строки только 1, для которого доступны данные наблюдений:

dat3=dat %>% group_by(site,visit_date,section)%>% filter(length(visit_id)>1,visit_id %in% list_visit_id)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...