繁体   English   中英

根据多个条件删除组中的行 r

[英]Remove row on group depending on multiple criteria r

我有一个 Date 变量有一些重复值的数据集,所以我想根据几个条件过滤这些行。 例如,dataframe 如下所示:

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 而另一个是数字,则 select 是数字行
  • 如果两个值相似(均为 NA 或均为数字),则 select 行的 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) 过滤。 我还删除了其他不重复的行。

提前致谢

我会根据您的条件对您的表格进行排序,然后为每个组选择第一行:

library(dplyr)

df %>% 
  rowwise() %>% 
  mutate(cnt_na = sum(across(-Date, ~ sum(is.na(.))))) %>% 
  arrange(Date, is.na(column_A), cnt_na) %>% 
  group_by(Date) %>% 
  slice_head() %>% 
  ungroup()

这使

# A tibble: 8 x 6
  Date       column_A column_B column_C Column_D cnt_na
  <date>        <int>    <int>    <int>    <int>  <int>
1 2020-01-01       10       15       15       20      0
2 2020-01-02       10       15       15       20      0
3 2020-01-03       10       13       15       20      0
4 2020-01-04       10       15       15       20      0
5 2020-01-05        7       NA       NA       28      2
6 2020-01-06       10       15       15       20      0
7 2020-01-07       10       15       15       20      0
8 2020-01-08       10       15       15       20      0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM