如何将两个独立数据集合并为含用药状态列的长格式?
合并吸毒者与非吸毒者数据集为指定长格式
原始数据集结构
吸毒者数据集df:
> dput(df) structure(list(ID_druguser = c("123", "234", "324", "345"), Test_Result = c("POSITIVE", "NEGATIVE", "NEGATIVE", "NEGATIVE"), Year_of_Birth = c("1931", "1932", "1932", "1932")), class = "data.frame", row.names = c(NA, -4L))
非吸毒者数据集df2:
> dput(df2) structure(list(ID_NONdruguser = c("955", "567", "856", "866"), Test_Result = c("NEGATIVE", "NEGATIVE", "NEGATIVE", "POSITIVE"), Year_of_Birth = c("1932", "1932", "1932", "1932")), class = "data.frame", row.names = c(NA, -4L))
目标格式
需合并为包含ID、Drug_status、Test_Result、Year_of_Birth的长格式数据集:
> dput(df_final) structure(list(ID = c("123", "234", "324", "345", "955", "567", "856", "866"), Drug_status = c("Yes", "Yes", "Yes", "Yes", "No", "No", "No", "No"), Test_Result = c("POSITIVE", "NEGATIVE", "NEGATIVE", "NEGATIVE", "NEGATIVE", "NEGATIVE", "NEGATIVE", "POSITIVE"), Year_of_Birth = c("1931", "1932", "1932", "1932", "1932", "1932", "1932", "1932")), class = "data.frame", row.names = c(NA, -8L))
解决方案
方法1:Base R 实现
# 处理吸毒者数据集:重命名ID列并添加状态标识 df_processed <- df names(df_processed)[names(df_processed) == "ID_druguser"] <- "ID" df_processed$Drug_status <- "Yes" # 处理非吸毒者数据集:重命名ID列并添加状态标识 df2_processed <- df2 names(df2_processed)[names(df2_processed) == "ID_NONdruguser"] <- "ID" df2_processed$Drug_status <- "No" # 合并两个处理后的数据集 df_final <- rbind(df_processed, df2_processed)
方法2:Tidyverse (dplyr) 实现
如果习惯使用tidyverse工具链,代码会更简洁:
library(dplyr) df_final <- bind_rows( # 处理吸毒者数据 df %>% rename(ID = ID_druguser) %>% mutate(Drug_status = "Yes"), # 处理非吸毒者数据 df2 %>% rename(ID = ID_NONdruguser) %>% mutate(Drug_status = "No") )
两种方法最终生成的df_final结构都与目标格式完全一致。
内容的提问来源于stack exchange,提问作者Jamie
相关产品推荐
相关产品推荐

