0

我有两组(EG和CG)倾向得分匹配。我的第一个数据框 df_1 显示了相应的参与者对。

df_1 <- read.table(text="
         ID_EG     ID_CG
         800289    823516
         800674    820870
         811434    800796
         838623    800958
         801208    836587
         801299    855510", header=TRUE) 

此外,我有一个数据框(长格式;即每一行都是一个测量点),其中仅包括来自 EG 的参与者。该数据框还包括一个表示时间点 1 的年龄的变量和一个表示我选择参与者的年龄组的变量。

df_2 <- read.table(text="
        ID            age_T1      age_group
        800289        18          young
        800289        18          young
        800289        18          young
        800289        18          young
        800289        18          young
        800289        18          young        
        800289        18          young
        800289        18          young
        800289        18          young
        800289        18          young
        800674        40          middle
        800674        40          middle
        800674        40          middle
        800674        40          middle
        811434        85          old
        811434        85          old
        811434        85          old
        811434        85          old
        811434        85          old
        811434        85          old
        838623        36          middle
        838623        36          middle
        838623        36          middle
        838623        36          middle
        838623        36          middle
        801208        21          young
        801208        21          young
        801299        77          old
        801299        77          old
        801299        77          old
        801299        77          old
        801299        77          old
        801299        77          old
        801299        77          old", header=TRUE)

最后,我的数据框只包含来自 CG 的参与者(同样是长格式)。此数据框不包括年龄组变量。

df_3 <- read.table(text="
        ID            age_T1
        823516        16      
        823516        16      
        823516        16      
        823516        16      
        823516        16      
        823516        16
        823516        16      
        823516        16      
        823516        16      
        823516        16
        855510        77
        855510        77
        855510        77
        855510        77
        855510        77
        855510        77
        855510        77
        820870        39        
        820870        39        
        820870        39        
        820870        39        
        800796        88  
        800796        88  
        800796        88  
        800796        88  
        800796        88  
        800796        88  
        800958        37        
        800958        37        
        800958        37        
        800958        37        
        800958        37        
        836587        18      
        836587        18", header=TRUE)

我现在想要一个包含 EG 和 CG 参与者的数据框(如 rbind df_2 和 df_3)。但是我想将 age_group 上的值插入到 CG 参与者中,该值对应于来自 EG 的相应匹配人的值。例如,ID 为 836587 (CG) 的人应该在 age_group 上收到与 801208 (EG) 相同的值,因为这两个参与者是一对匹配的(根据 df_1)。

这是最终数据集的样子:

df_final <- read.table(text="
        ID            age_T1      age_group
        800289        18          young
        800289        18          young
        800289        18          young
        800289        18          young
        800289        18          young
        800289        18          young        
        800289        18          young
        800289        18          young
        800289        18          young
        800289        18          young
        800674        40          middle
        800674        40          middle
        800674        40          middle
        800674        40          middle
        811434        85          old
        811434        85          old
        811434        85          old
        811434        85          old
        811434        85          old
        811434        85          old
        838623        36          middle
        838623        36          middle
        838623        36          middle
        838623        36          middle
        838623        36          middle
        801208        21          young
        801208        21          young
        801299        77          old
        801299        77          old
        801299        77          old
        801299        77          old
        801299        77          old
        801299        77          old
        801299        77          old
        823516        16          young
        823516        16          young
        823516        16          young
        823516        16          young
        823516        16          young
        823516        16          young
        823516        16          young
        823516        16          young
        823516        16          young
        823516        16          young
        855510        77          old
        855510        77          old
        855510        77          old
        855510        77          old
        855510        77          old
        855510        77          old
        855510        77          old
        820870        39          middle
        820870        39          middle
        820870        39          middle
        820870        39          middle
        800796        88          old
        800796        88          old
        800796        88          old
        800796        88          old
        800796        88          old
        800796        88          old
        800958        37          middle
        800958        37          middle
        800958        37          middle
        800958        37          middle
        800958        37          middle
        836587        18          young
        836587        18          young", header=TRUE)

你知道怎么做吗?非常感谢任何帮助或建议!

4

1 回答 1

1

也许我错过了一种简单的方法来做到这一点,但这是一种使用方法dplyr

library(dplyr)

df_3 %>%
   mutate(age_group = NA_character_) %>%
   bind_rows(df_2 %>% mutate(age_group = as.character(age_group))) %>%
   left_join(df_1, by = c("ID" = "ID_EG")) %>%
   mutate(age_group = ifelse(is.na(age_group),age_group[match(ID, ID_CG)], age_group)) %>%
   select(-ID_CG) 

在这里,我们首先在其中添加一个空列age_groupdf_3并将行与df_2. 然后我们left_join用相应的“EG”值df_1替换"ID_EG"NACG”的值/age_group

于 2019-08-28T11:48:59.623 回答