0
set.seed(1)
data=data.frame("id"=1:10,
                  "score"=NA)
data1=data.frame("id"=c(1:3,5,7,9,10),
                 "score"=sample(50:100,7))
WANT=data.frame("id"=1:10,
                "score"=c(83,81,53,NA,59,NA,58,NA,99,67))

I have complete data frame "data" but I do not have values for everybody which is in my second data frame "data1". However for administrative reasons I must use the full data. Basically "WANT" maintains the structure of "data" but fills in the values where they are available.

bvowe
  • 3,004
  • 3
  • 16
  • 33

1 Answers1

1

Here is a simple solution.

set.seed(1)
data=data.frame("id"=1:10,
                "score"=NA)
data1=data.frame("id"=c(1:3,5,7,9,10),
                 "score"=sample(50:100,7))
WANT=data.frame("id"=1:10,
                "score"=c(83,81,53,NA,59,NA,58,NA,99,67))

library(tidyverse)

data %>%
  select(-score) %>% 
  left_join(data1)

I may be reaching but maybe you need.

set.seed(1)
data=data.frame("id"=1:10,
                "score"=sample(50:100,10))
data1=data.frame("id"=c(1:3,5,7,9,10),
                 "score"=sample(50:100,7))
WANT=data.frame("id"=1:10,
                "score"=c(83,81,53,NA,59,NA,58,NA,99,67))

library(tidyverse)

  data %>%
  mutate(score1 = score) %>% 
  select(-score) %>% 
  left_join(data1) %>% 
  mutate(score = if_else(is.na(score),
                        score1,
                        score)) %>% 
  select(-score1)
Bruno
  • 4,109
  • 1
  • 9
  • 27