This post has been removed by the author
A non-tidyverse solution:
library(tibble)
#> Warning: package 'tibble' was built under R version 3.5.3
library(dplyr)
df <- tibble::tribble(
~RequestID, ~PiggybackID, ~PiggybackOrder, ~IsJrPiggy, ~value,
1, 100, 0, FALSE, 1.5,
2, 100, 1, TRUE, 1.5,
3, 100, 2, TRUE, 1.5,
4, 101, 0, FALSE, 2,
5, 101, 1, TRUE, NA,
6, 102, 0, FALSE, 3,
7, 102, 1, TRUE, 3,
8, 103, 0, FALSE, 1.5,
9, 103, 1, TRUE, NA,
10, 103, 2, TRUE, NA
)
Seniors <- df %>% filter(PiggybackOrder == 0)
SeniorsVec <- Seniors$value
names(SeniorsVec) <- Seniors$PiggybackID
df$value <- SeniorsVec[as.character(df$PiggybackID)]
df
#> # A tibble: 10 x 5
#> RequestID PiggybackID PiggybackOrder IsJrPiggy value
#> <dbl> <dbl> <dbl> <lgl> <dbl>
#> 1 1 100 0 FALSE 1.5
#> 2 2 100 1 TRUE 1.5
#> 3 3 100 2 TRUE 1.5
#> 4 4 101 0 FALSE 2
#> 5 5 101 1 TRUE 2
#> 6 6 102 0 FALSE 3
#> 7 7 102 1 TRUE 3
#> 8 8 103 0 FALSE 1.5
#> 9 9 103 1 TRUE 1.5
#> 10 10 103 2 TRUE 1.5
Created on 2019-12-27 by the reprex package (v0.3.0.9000)
1 Like
Maybe you have oversimplified your issue, but it seems like all values are the same within each piggyback, so if that is actually the case, you could use tidyr::fill()
and have a much simpler solution.
library(tidyverse)
df <- tibble::tribble(
~RequestID, ~PiggybackID, ~PiggybackOrder, ~IsJrPiggy, ~value,
1, 100, 0, FALSE, 1.5,
2, 100, 1, TRUE, 1.5,
3, 100, 2, TRUE, 1.5,
4, 101, 0, FALSE, 2,
5, 101, 1, TRUE, NA,
6, 102, 0, FALSE, 3,
7, 102, 1, TRUE, 3,
8, 103, 0, FALSE, 1.5,
9, 103, 1, TRUE, NA,
10, 103, 2, TRUE, NA
)
df %>%
group_by(PiggybackID) %>%
fill(value, .direction = "down")
#> # A tibble: 10 x 5
#> # Groups: PiggybackID [4]
#> RequestID PiggybackID PiggybackOrder IsJrPiggy value
#> <dbl> <dbl> <dbl> <lgl> <dbl>
#> 1 1 100 0 FALSE 1.5
#> 2 2 100 1 TRUE 1.5
#> 3 3 100 2 TRUE 1.5
#> 4 4 101 0 FALSE 2
#> 5 5 101 1 TRUE 2
#> 6 6 102 0 FALSE 3
#> 7 7 102 1 TRUE 3
#> 8 8 103 0 FALSE 1.5
#> 9 9 103 1 TRUE 1.5
#> 10 10 103 2 TRUE 1.5
Created on 2019-12-27 by the reprex package (v0.3.0.9000)
2 Likes
This topic was automatically closed 21 days after the last reply. New replies are no longer allowed.