按 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 创建
我有
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 创建