簡體   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