У меня есть большой комплексный набор данных, который мне нужно тщательно обработать. В некоторых случаях это означает фильтрацию отдельной записи на основе уникальных критериев. Предположим, у меня есть следующие данные:
locname mo dy yr nest.stat daynight
1 CARACO CREEK 3 9 1994 U D
2 CARACO CREEK 4 4 1994 <NA> D
3 CARACO CREEK 4 14 1994 <NA> N
4 CARACO CREEK 5 5 1994 <NA> D
5 CARACO CREEK 5 17 1994 <NA> N
6 CARACO CREEK 6 29 1994 <NA> N
7 CARACO CREEK 8 2 1994 F D
Мне нужно удалить седьмую запись, которая уникальна в наборе данных с помощью locname_yr_nest.stat (я не могу просто сказать df [-7,], потому что позиция может измениться в новых итерациях данных).
Я пытался
df[!(df$locname=="CARACO CREEK" & df$nest.stat=="F" & df$yr==1994),]
но это возвращает
locname mo dy yr nest.stat daynight
1 CARACO CREEK 3 9 1994 U D
NA <NA> NA NA NA <NA> <NA>
NA.1 <NA> NA NA NA <NA> <NA>
NA.2 <NA> NA NA NA <NA> <NA>
NA.3 <NA> NA NA NA <NA> <NA>
NA.4 <NA> NA NA NA <NA> <NA>
Если я фильтрую только по двум столбцам (например, locname и yr), это работает нормально. Вот как я создал этот меньший набор из большего, показывая все записи 1994 года. Добавление третьего столбца исключает его. В качестве дополнительного примечания, этот точный подход работал в другом наборе данных в разных столбцах.
Вот пример для простоты:
df <- structure(list(locname = c("CARACO CREEK", "CARACO CREEK", "CARACO CREEK",
"CARACO CREEK", "CARACO CREEK", "CARACO CREEK", "CARACO CREEK"
), mo = c(3, 4, 4, 5, 5, 6, 8), dy = c(9, 4, 14, 5, 17, 29, 2
), yr = c(1994, 1994, 1994, 1994, 1994, 1994, 1994), nest.stat = c("U",
NA, NA, NA, NA, NA, "F"), daynight = c("D", "D", "N", "D", "N",
"N", "D")), class = "data.frame", row.names = c(NA, 7L))