R语言基于行条件判断为Timepoint新增因子水平的方法
R实现新增Timepoint水平X的代码方案
我们可以通过按患者ID分组计算的方式完成需求,以下基于tidyverse套件实现,逻辑清晰易读:
步骤1:加载依赖包
library(dplyr)
步骤2:计算X时间点的所有行数据
按PatientID分组,每个患者对应一组A、B时间点的记录,按照给定的阈值规则生成X时间点的取值,代码中加入了非空判断避免NA值参与比较导致结果异常:
df_x <- df %>% group_by(PatientID) %>% summarise( Timepoint = "X", A = ifelse(!is.na(A[Timepoint == "B"]) & A[Timepoint == "B"] > 999, A[Timepoint == "B"], A[Timepoint == "A"]), B = ifelse(!is.na(B[Timepoint == "B"]) & B[Timepoint == "B"] > 986, B[Timepoint == "B"], B[Timepoint == "A"]), C = ifelse(!is.na(C[Timepoint == "B"]) & C[Timepoint == "B"] > 1000, C[Timepoint == "B"], C[Timepoint == "A"]), D = ifelse(!is.na(D[Timepoint == "B"]) & D[Timepoint == "B"] > 1030, D[Timepoint == "B"], D[Timepoint == "A"]), E = ifelse(!is.na(E[Timepoint == "B"]) & E[Timepoint == "B"] > 800, E[Timepoint == "B"], E[Timepoint == "A"]), G = ifelse(!is.na(G[Timepoint == "B"]) & G[Timepoint == "B"] > 950, G[Timepoint == "B"], G[Timepoint == "A"]) ) %>% ungroup()
步骤3:合并数据得到最终结果
将生成的X时间点数据和原始数据合并,若需要将Timepoint转为含X水平的因子类型可执行最后一行可选代码:
df_final <- bind_rows(df, df_x) # 可选:将Timepoint转为因子并指定水平顺序 df_final$Timepoint <- factor(df_final$Timepoint, levels = c("A", "B", "X"))
内容的提问来源于stack exchange,提问作者Lili
相关产品推荐
相关产品推荐

