在删除重复项之前修改重复行的值

问题描述 投票:0回答:1

我正在尝试修改 R 中的表。我有一个包含数千行的表,我想删除重复的行(包)并修改这些行的输入和输出日期(在删除它们之前)。目标是获取重复行中较早的 IN-DATE 和较早的 OUT-DATE。

Package;IN-DATE;OUT-DATE  
AMFU12;2023-01-30;2023-01-30
AXIU18;2023-01-11;2023-01-11
FANU45;2022-11-11;2023-01-23
FANU45;2022-11-11;2023-01-23
QIBU55;2023-01-11;2023-01-23
QIBU55;2023-01-23;2023-01-30

最后,我想获得具有唯一包列并修改输入和输出日期的表,如下所示:

Package; IN-DATE    ;OUT-DATE  
AMFU12 ; 2023-01-30 ;2023-01-30
AXIU18 ; 2023-01-11 ;2023-01-11
FANU45 ; 2022-11-11 ;2023-01-23
QIBU55 ; 2023-01-11 ;2023-01-30

此时我只能删除所有重复的行。我不知道如何包含具有修改输入和输出日期的重复行。

duplicates <- 
  packages %>% 
  group_by(Package) %>%
  mutate(duplicate = n()) %>%
  filter(duplicate > 1) %>%
  select(-duplicate)

在这种情况下,我将不胜感激您的建议。也许你可以在这个问题上找到不同的方法。

r duplicates data-manipulation
1个回答
0
投票

您可以通过使用 dplyr 包根据“Package”列删除重复行,然后修改“IN-DATE”和“OUT-DATE”列以保留最早的“IN-DATE”和“OUT-DATE”列来实现 R 中的目标每个独特“包”的最新“过时”。具体方法如下:

# Sample data with corrected column names
data <- data.frame(
  Package = c("AMFU12", "AXIU18", "FANU45", "FANU45", "QIBU55", "QIBU55"),
  IN_DATE = as.Date(c("2023-01-30", "2023-01-11", "2022-11-11", "2022-11-11", "2023-01-11", "2023-01-23")),
  OUT_DATE = as.Date(c("2023-01-30", "2023-01-11", "2023-01-23", "2023-01-23", "2023-01-23", "2023-01-30"))
)

library(dplyr)

# Group by Package, retain earliest IN_DATE and latest OUT_DATE
result <- data %>%
  group_by(Package) %>%
  summarize(
    IN_DATE = min(IN_DATE),
    OUT_DATE = max(OUT_DATE)
  ) %>%
  ungroup()

# Print the result
print(result)

结果如下

Package IN_DATE    OUT_DATE  
  <chr>   <date>     <date>    
1 AMFU12  2023-01-30 2023-01-30
2 AXIU18  2023-01-11 2023-01-11
3 FANU45  2022-11-11 2023-01-23
4 QIBU55  2023-01-11 2023-01-30
© www.soinside.com 2019 - 2024. All rights reserved.