在数据集中插入一个与倾向得分匹配的人的值相对应的值
Insert a value corresponding to the value of a propensity score matched person in data set
我有两组(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)
你知道怎么做吗?非常感谢任何帮助或建议!
也许我错过了一个简单的方法来做到这一点,但这是使用 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)
这里我们先在df_3
中添加一个空列age_group
,然后用df_2
绑定行。然后我们用 df_1
和 "ID_EG"
做一个 left_join
并用相应的 "EG" 替换 age_group
中 "CG" 的 NA
值值/
我有两组(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)
你知道怎么做吗?非常感谢任何帮助或建议!
也许我错过了一个简单的方法来做到这一点,但这是使用 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)
这里我们先在df_3
中添加一个空列age_group
,然后用df_2
绑定行。然后我们用 df_1
和 "ID_EG"
做一个 left_join
并用相应的 "EG" 替换 age_group
中 "CG" 的 NA
值值/