我有一个包含大量重复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
重复的条目。
答案 0 :(得分:1)
您需要分组,即(使用dplyr
)
library(dplyr)
DF %>%
group_by(DATE) %>%
filter(!(duplicated(TIME) & duplicated(AIR))