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
  • 2,476
  • 1
  • 13
  • 20

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
  • 3,911
  • 1
  • 8
  • 26