R语言常用代码

Koucw Lv3

基本处理

数据清理

删除包含空值的个案

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
#vlookup 
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, ...)
# X:数组、矩阵、数据框
# MARGIN: 按行计算或按按列计算,1表示按行,2表示按列
# 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)
# con是逻辑条件,当逻辑条件的值为TRUE时,则输出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),
# OS 生存时间
# StatusforOS 生存状态,1表示事件发生,即死亡
# group 为分组依据
# data为数据框
legend.title = "Group", # 图例的标题
legend.labs = c("RH", "RS"), # 图例显示的名称
risk.table = TRUE, # 是否显示risk table
pval = TRUE, # 是否显示P value
conf.int = TRUE,
xlab = "Overall Survival (months)", # 横坐标标题
break.time.by = 12, # 横坐标刻度
ggtheme = theme_light(),
risk.table.y.text.col = T, # risk table文字注释颜色
risk.table.y.text = FALSE, # risk table显示条形而不是文字
)

倾向性评分匹配(PSM)

1
2
3
4
5
data_psm <- matchit(group~UICC7,data=data_cache1,method = "nearest",ratio=1)
# caliper = 0.2, 添加卡钳值
summary(data_psm)
data_postpsm <- match.data(data_psm)
# 将匹配后的数据集存储在data_psm中