У меня есть набор данных с большим количеством повторяющихся записей данных TIME и AIR. Мне нужно удалить все строки, содержащие эти записи. Это сам по себе было бы очень просто:Удаление дубликатов только из определенных столбцов/строк
DATE <- c(1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3)
#Supposed to be 4 entries per date; day 1 has 1 entry too many, day 2 has 2 entries too many
TIME <- c(0,3,3,6,9,0,0,3,6,9,9,0,3,6,9)
#Samples are taken every 3 hours from 0-9 each day
AIR <- c(1.1, 1.2, 1.2, 1.3, 1.4, 1.1, 1.1, 1.2, 1.3, 1.4, 1.4, 1.1, 1.2, 1.3, 1.4)
DF <- data.frame(DATE, TIME, AIR)
DF1 <- DF[!(duplicated(DF$TIME) & duplicated(DF$AIR)),]
DF1
выведет следующее:
DATE TIME AIR
1 1 0 1.1
2 1 3 1.2
4 1 6 1.3
5 1 9 1.4
Однако мне нужно рассмотреть каждый день, или DATE, индивидуально, выход я на самом деле ищу это :
DATE TIME AIR
1 0 1.1
1 3 1.2
1 6 1.3
1 9 1.4
2 0 1.1
2 3 1.2
2 6 1.3
2 9 1.4
3 0 1.1
3 3 1.2
3 6 1.3
3 9 1.4
В этом случае дублирование останавливается на каждый данный день. Я думал, что это будет так же просто, как небольшая адаптация моей части кода, выясняется, что это не так, я пробовал много вариантов: DF2 <- DF[!(duplicated(DF$TIME) & duplicated(DF$AIR)) & duplicated(DF$DATE),]
безрезультатно. Поэтому, вероятно, это требует немного более сложного - или, по крайней мере, за пределами моих текущих средств. Мог ли кто-нибудь посоветовать, что мне нужно делать, чтобы каждый день каждый день рассматривать отдельно? Спасибо огромное!
Обратите внимание, что в действительности может быть, что TIME
дублируется, но AIR
не является; поэтому я должен удалить только те записи, где TIME
и AIR
являются дубликатами.
Если у вас нет никаких других столбцов в ваших данных, вы можете использовать 'уникальный (DF)' –
К сожалению, мой полный набор данных имеет около 104 столбцы – Visser
В этом случае вы можете использовать 'DF [! duplicated (DF [, 1: 3]),]', если это были первые 3 столбца. Кроме того, вы можете указать вектор символов имен столбцов, чтобы заменить «1: 3». –