簡體   English   中英

根據 r 中的條件分組、刪除重復和交換值

[英]Group by, remove duplicates and swap value based on condition in r

我有一張桌子如下

+----+--------+-------+------------+
| ID | Serial | VALUE |    DATE    |
+----+--------+-------+------------+
|  1 |     11 |    -1 | 2019-10-01 |
|  1 |     11 |    -2 | 2019-10-02 |
|  2 |     22 |    -9 | 2019-09-01 |
|  2 |     22 |   -10 | 2019-09-02 |
|  2 |     12 |     9 | 2019-09-03 |
|  3 |     12 |   -10 | 2019-08-01 |
|  3 |     12 |    -8 | 2019-08-03 |
|  3 |     13 |    -7 | 2019-08-04 |
+----+--------+-------+------------+

我想根據 ID 和 Serial 對表進行分組,然后只保留那些在 DATE 中出現最新的 VALUE,同時將日期交換為較早的值我還希望保留與 ID 和 Serial 沒有任何重復的行

我想要的結果如下

+----+--------+-------+------------+
| ID | Serial | VALUE |    DATE    |
+----+--------+-------+------------+
|  1 |     11 |    -2 | 2019-10-01 |
|  2 |     22 |   -10 | 2019-09-01 |
|  2 |     12 |     9 | 2019-09-03 |
|  3 |     12 |    -8 | 2019-08-01 |
|  3 |     13 |    -7 | 2019-08-04 |
+----+--------+-------+------------+ 

我可以處理的代碼是使用 dplyr 進行分組我不確定如何繼續使用 rest

到目前為止,我的代碼如下

df %>%
group by (ID, SERIAL)

這是一個想法。

library(tidyverse)

dat %>%
  mutate(DATE = as.Date(DATE)) %>%
  group_by(ID, Serial) %>%
  summarize(VALUE = last(VALUE), DATE = min(DATE)) %>%
  ungroup() %>%
  arrange(ID, DATE)
# # A tibble: 5 x 4
#      ID Serial VALUE DATE      
#   <dbl>  <dbl> <dbl> <date>    
# 1     1     11    -2 2019-10-01
# 2     2     22   -10 2019-09-01
# 3     2     12     9 2019-09-03
# 4     3     12    -8 2019-08-01
# 5     3     13    -7 2019-08-04

數據

# Create an example
dat <- tribble(
  ~ID, ~Serial, ~VALUE, ~DATE,
    1,      11,      -1, "2019-10-01",
    1,      11,      -2, "2019-10-02",
    2,      22,      -9, "2019-09-01",
    2,      22,     -10, "2019-09-02",
    2,      12,       9, "2019-09-03",
    3,      12,     -10, "2019-08-01",
    3,      12,      -8, "2019-08-03",
    3,      13,      -7, "2019-08-04"
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM