我需要删除一年中每一天都没有测量值的年份。假设这是一个完整的集合,我想摆脱2001年的所有行,因为2001年缺少一项度量。
year day value
2000 1 5
2000 2 3
2000 3 2
2000 4 3
2001 1 2
2001 2 NA
2001 3 6
2001 4 5
对不起,我没有代码尝试,现在无法解决这个问题,我花了很长时间才走到这一步。希望我可以%>%参与其中,因为这是长期目标。
答案 0 :(得分:5)
根据NA
个值的存在进行过滤:
df %>%
group_by(year) %>%
filter(!anyNA(value))
其他filter
条条件(选择您认为最易读的内容):
all(!is.na(value))
sum(is.na(value)) == 0
!any(is.na(value))
答案 1 :(得分:1)
这里是使用基数R的单行解决方案-
df %>% .[!ave(.$value, .$year, FUN = anyNA), ]
示例-
df <- data.frame(year = c(rep(2000, 4), rep(2001, 4)), day = 1:4, value = sample.int(10, 8))
df$value[6] <- NA_integer_
# year day value
# 1 2000 1 4
# 2 2000 2 3
# 3 2000 3 2
# 4 2000 4 7
# 5 2001 1 8
# 6 2001 2 NA
# 7 2001 3 1
# 8 2001 4 5
df %>% .[!ave(.$value, .$year, FUN = anyNA), ]
# year day value
# 1 2000 1 4
# 2 2000 2 3
# 3 2000 3 2
# 4 2000 4 7
答案 2 :(得分:1)
在基数R中,您可以执行以下操作:
subset(df,!year %in% year[is.na(value)])
# year day value
# 1 2000 1 8
# 2 2000 2 5
# 3 2000 3 4
# 4 2000 4 1