Я пытаюсь отфильтровать набор данных, содержащий реплицированные строки, являющиеся ошибками, и удалить их.Мне удалось сделать это по-другому, но, видя силу 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)