基本处理
数据清理
删除包含空值的个案
1
| data_cache <- database_group[complete.cases(database_group$group),]
|
筛选数据
Subset
1
| subset_df <- subset(df, tl5 + tl6 + tl7 + tl8 == 3)
|
可以结合逻辑运算符来指定多个条件,如:&(与)、|(或)、!(非)
1
| subset_df <- subset(df, tl5 + tl6 + tl7 + tl8 == 3 & tl1 + tl2 + tl3 + tl4 == 0)
|
逻辑条件
1
| filtered_df <- df[df$tl5 + df$tl6 + df$tl7 + df$tl8 == 3, ]
|
将group列数值为2/3的个案生成新数据框database_G23
1
| database_G23 <- database_5mm[database_5mm$group %in% c(2,3),]
|
分组
1 2
| data$group[data$seg4 + data$seg5 == 1] <- 1 data$group[data$seg4 + data$seg5 == 2] <- 2
|
Merge
根据键值合并两张表=VLOOKUP
1 2 3
| merge(tableA,tableB,by="idno") merge(tableA,tableB,by=c("id", "sex"))
|
Apply
apply函数是最常用的代替for循环的函数。apply函数可以对矩阵、数据框、数组(二维、多维),按行或列进行循环计算,对子元素进行迭代,并把子元素以参数传递的形式给自定义的FUN函数中,并以返回计算结果。
1 2 3 4
| apply(X, MARGIN, FUN, ...)
|
sltl是肿瘤的长径,sltw是肿瘤的宽径,我想要求肿瘤的最长径,并且存储在totaltd列中
1
| database_outcome[totaltd]<- apply(database_outcome[c('sltl','sltw')], 1, max)
|
View
查看数据框特定的某几列(尤其是在数据框列数特别多的时候蛮有用)
1
| View(database_outcome[c('sltl','sltw','totaltd')])
|
Ifelse
1 2 3
| if(con, statement1, statement2)
|
我要根据srmar的值将数据分为3组,0.5<srmar<=1为组1,srmar>1为组2,0<srmar≤0.5为组3(不包含srmar为0的值),如果都不满足则为NA(空值)
1
| database_5mm$group <- ifelse(database_5mm$srmar > 0.5 & database_5mm$srmar <= 1,1,ifelse(database_5mm$srmar>1,2,ifelse(database_5mm$srmar>0 & database_5mm$srmar <= 0.5 ,3,NA)))
|
分类变量
批量设置分类变量
1 2 3 4
| factor_list <- c('A','B') for(var in factor_list){ data_total_type[[var]] <- as.factor(data_total_type[[var]]) }
|
基线水平
生存分析
OS
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| ggsurvplot( survfit(Surv(OS,StatusforOS)~group,data=df), legend.title = "Group", legend.labs = c("RH", "RS"), risk.table = TRUE, pval = TRUE, conf.int = TRUE, xlab = "Overall Survival (months)", break.time.by = 12, ggtheme = theme_light(), risk.table.y.text.col = T, risk.table.y.text = FALSE, )
|
倾向性评分匹配(PSM)
1 2 3 4 5
| data_psm <- matchit(group~UICC7,data=data_cache1,method = "nearest",ratio=1)
summary(data_psm) data_postpsm <- match.data(data_psm)
|