这是我的数据框:
set.seed(1)
df <- data.frame(A = 1:50, B = 11:60, c = 21:70)
head(df)
df.final <- as.data.frame(lapply(df, function(cc) cc[ sample(c(TRUE, NA), prob = c(0.85, 0.15), size = length(cc), replace = TRUE) ]))
我想删除NA不填充其最后5个值的列。也就是说,仅保留行数从46到50的列。最后5个值具有一个或多个NA的列将被删除。
使用dplyr是否有可能?
有帮助吗?
答案 0 :(得分:2)
dplyr::select()
接受整数列位置。我们可以用它来实现这一目标-
result <- df.final %>% select(., which(!is.na(colSums(tail(., 5)))))
head(result)
A B
1 1 11
2 2 NA
3 3 13
4 NA 14
5 5 15
6 NA 16
答案 1 :(得分:2)
Shree击败了我,但它可能派上用场
> df.final %>% tail
A B c
45 45 55 65
46 46 NA 66
47 47 57 67
48 NA 58 68
49 NA 59 69
50 NA 60 NA
> df.final %>%
+ select_if(~ !any(is.na(tail(., n = 1)))) %>%
+ tail()
B
45 55
46 NA
47 57
48 58
49 59
50 60
只需将上面的n
更改为所需的最后一个NA。