按 R 中匹配行中的值更新 table 行条目

Update table row entry by value in matching row in R

我有

mydf1 <- data.frame(unique.id = c("aa", "bb", "aa", "cc", "bb"), date = c("1/2/21", "1/4/21", "1/8/21", "1/5/21", "12/5/20"), A = c(1, 1, 1, 1, 1))

我需要更新 A 的值,以便对于具有给定 unique.ID 的多行的任何实例(例如第 1 行和第 3 行),值 A 更新为新值 (2)对于日期较晚的行。这将导致以下输出

mydf2 <- data.frame(unique.id = c("aa", "bb", "aa", "cc", "bb"), date = c("1/2/21", "1/4/21", "1/8/21", "1/5/21", "12/5/20"), A = c(1, 2, 2, 1, 1))

第 3 行的 A = 2,因为第 1 行和第 3 行都有“aa”,第 3 行的日期较晚,第 2 行和第 5 行共享一个公共 unique.id,但第 2 行的日期较晚.

如果您对日期进行排序并计算按 id 分组的行,则可以轻松解决此问题

library(tidyverse)

mydf1 <- data.frame(unique.id = c("aa", "bb", "aa", "cc", "bb"), date = c("1/2/21", "1/4/21", "1/8/21", "1/5/21", "12/5/20"), A = c(1, 1, 1, 1, 1))

mydf2 <- data.frame(unique.id = c("aa", "bb", "aa", "cc", "bb"), date = c("1/2/21", "1/4/21", "1/8/21", "1/5/21", "12/5/20"), A = c(1, 2, 2, 1, 1))

mydf1 %>% 
  mutate(date = lubridate::dmy(date)) %>% 
  group_by(unique.id) %>%
  arrange(date) %>% 
  mutate(result = dplyr::row_number())
#> # A tibble: 5 x 4
#> # Groups:   unique.id [3]
#>   unique.id date           A result
#>   <chr>     <date>     <dbl>  <int>
#> 1 bb        2020-05-12     1      1
#> 2 aa        2021-02-01     1      1
#> 3 bb        2021-04-01     1      2
#> 4 cc        2021-05-01     1      1
#> 5 aa        2021-08-01     1      2

reprex package (v0.3.0)

于 2021-01-28 创建