如何使同一ID内的列中的最后一个条目成为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_till "中的第一个条目

应该用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中做到这一点吗?

提前非常感谢!

我们可以将日期列转换为Date类,并在执行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"))
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()))

相关内容

  • 没有找到相关文章

最新更新