【发布时间】:2021-02-24 11:47:05
【问题描述】:
我有一个在 Date 变量上有一些重复值的数据集,所以我想根据几个条件过滤这些行。例如,数据框如下所示:
df <- read.table(text =
"Date column_A column_B column_C Column_D
1 2020-01-01 10 15 15 20
2 2020-01-02 10 15 15 20
3 2020-01-03 10 13 15 20
4 2020-01-04 10 15 15 20
5 2020-01-05 NA 14 15 20
6 2020-01-05 7 NA NA 28
7 2020-01-06 10 15 15 20
8 2020-01-07 10 15 15 20
9 2020-01-07 10 NA NA 20
10 2020-01-08 10 15 15 20", header=TRUE)
df$Date <- as.Date(df$Date)
过滤的不同条件应该是,仅在重复行上:
- 如果“A 列”为 NA 和其他数字,则选择数字行
- 如果两个值相似(都是 NA 或都是数字),请选择 NA 较少的行。
经过几个选择后,我最好的方法是:
df$cnt_na <- apply(df[,2:5], 1, function(x) sum(is.na(x)))
df <- df %>% group_by(Date) %>% slice(which.min(all_of(cnt_na))) %>% select(-cnt_na)
虽然在我的情况下,它不满足第一个条件。主要问题是,如果我按 !is.na(Date) 过滤,我还会删除其他不重复的行。
提前致谢
【问题讨论】: