分组依据,删除重复项并根据 r 中的条件交换值
Group by, remove duplicates and swap value based on condition in r
我有一个table
+----+--------+-------+------------+
| 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 对 table 进行分组,然后仅保留在 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 进行分组
我不确定如何进行剩下的工作
到目前为止我的代码如下
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"
)
我有一个table
+----+--------+-------+------------+
| 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 对 table 进行分组,然后仅保留在 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 进行分组 我不确定如何进行剩下的工作
到目前为止我的代码如下
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"
)