如何使同一 ID 中的列中的最后一个条目成为 R 中的第一个条目?
How to make the last entry in a column within the same ID to be the first entry in R?
我有一个超过 15000 行的数据集,看起来类似于:
ID valid_from valid_until action action_text
1 1 01/01/2010 31/01/2016 1 Text1
2 1 01/02/2016 01/01/2021 2 Text2
3 2 01/10/2010 30/09/2019 4 Text4
4 3 01/05/2015 31/12/2015 3 Text3
5 3 01/01/2016 30/09/2020 3 Text3
我想合并行,使同一 ID 中 valid_until 列中的最后一个条目成为第一个条目。基本上,“valid_until”列中的第一个条目应该替换为 ID 中的最后一个条目,并且应该删除不是 ID 中第一个条目的行。
为了更清楚,我希望我的结果看起来像这样:
ID valid_from valid_until action action_text
1 1 01/01/2010 01/01/2021 1 Text1
2 2 01/10/2010 30/09/2019 4 Text4
3 3 01/05/2015 30/09/2020 3 Text3
有谁知道我如何在 R 中做到这一点?
非常感谢您!
library(dplyr)
df %>% group_by(ID) %>%
mutate(valid_from=min(valid_from),
valid_until=max(valid_until),
action=first(action),
action_text=first(action_text)) %>%
distinct(across(everything()))
我们可以将日期列转换为 Date
class 并在执行 distinct
之前更改 'valid_until' 列
library(dplyr)
library(lubridate)
df1 %>%
mutate(across(starts_with('valid'), dmy)) %>%
group_by(ID) %>%
mutate(valid_until = max(valid_until)) %>%
ungroup %>%
distinct(ID, .keep_all = TRUE) %>%
ungroup
-输出
# A tibble: 3 × 5
ID valid_from valid_until action action_text
<int> <date> <date> <int> <chr>
1 1 2010-01-01 2021-01-01 1 Text1
2 2 2010-10-01 2019-09-30 4 Text4
3 3 2015-05-01 2020-09-30 3 Text3
数据
df1 <- structure(list(ID = c(1L, 1L, 2L, 3L, 3L), valid_from = c("01/01/2010",
"01/02/2016", "01/10/2010", "01/05/2015", "01/01/2016"), valid_until = c("31/01/2016",
"01/01/2021", "30/09/2019", "31/12/2015", "30/09/2020"), action = c(1L,
2L, 4L, 3L, 3L), action_text = c("Text1", "Text2", "Text4", "Text3",
"Text3")), class = "data.frame", row.names = c("1", "2", "3",
"4", "5"))
我有一个超过 15000 行的数据集,看起来类似于:
ID valid_from valid_until action action_text
1 1 01/01/2010 31/01/2016 1 Text1
2 1 01/02/2016 01/01/2021 2 Text2
3 2 01/10/2010 30/09/2019 4 Text4
4 3 01/05/2015 31/12/2015 3 Text3
5 3 01/01/2016 30/09/2020 3 Text3
我想合并行,使同一 ID 中 valid_until 列中的最后一个条目成为第一个条目。基本上,“valid_until”列中的第一个条目应该替换为 ID 中的最后一个条目,并且应该删除不是 ID 中第一个条目的行。
为了更清楚,我希望我的结果看起来像这样:
ID valid_from valid_until action action_text
1 1 01/01/2010 01/01/2021 1 Text1
2 2 01/10/2010 30/09/2019 4 Text4
3 3 01/05/2015 30/09/2020 3 Text3
有谁知道我如何在 R 中做到这一点?
非常感谢您!
library(dplyr)
df %>% group_by(ID) %>%
mutate(valid_from=min(valid_from),
valid_until=max(valid_until),
action=first(action),
action_text=first(action_text)) %>%
distinct(across(everything()))
我们可以将日期列转换为 Date
class 并在执行 distinct
library(dplyr)
library(lubridate)
df1 %>%
mutate(across(starts_with('valid'), dmy)) %>%
group_by(ID) %>%
mutate(valid_until = max(valid_until)) %>%
ungroup %>%
distinct(ID, .keep_all = TRUE) %>%
ungroup
-输出
# A tibble: 3 × 5
ID valid_from valid_until action action_text
<int> <date> <date> <int> <chr>
1 1 2010-01-01 2021-01-01 1 Text1
2 2 2010-10-01 2019-09-30 4 Text4
3 3 2015-05-01 2020-09-30 3 Text3
数据
df1 <- structure(list(ID = c(1L, 1L, 2L, 3L, 3L), valid_from = c("01/01/2010",
"01/02/2016", "01/10/2010", "01/05/2015", "01/01/2016"), valid_until = c("31/01/2016",
"01/01/2021", "30/09/2019", "31/12/2015", "30/09/2020"), action = c(1L,
2L, 4L, 3L, 3L), action_text = c("Text1", "Text2", "Text4", "Text3",
"Text3")), class = "data.frame", row.names = c("1", "2", "3",
"4", "5"))