R语言由一个个基础函数组成,熟练灵活应用这些基础函数,有助于我们更好的学习R包及编程,这个专栏可能很多人不感兴趣,但是对提升自己很有帮助,感兴趣的朋友一起来学习。今天我们来介绍一下%in%函数的用法,这个函数在我们数据提取、清洗及编程中用处很大,今天我们一起来学习一下。
%in%函数的用法就是判断函数左边的向量是否在函数右边中,然后返回一个布尔值(就是正确或者错误)。我们由浅入深来体会这个函数的应用。先建立两个向量a和b.
a<-1:10
b<-c(1,3,5,9)
a %in% b
如图所示a和b一样放入时候为TURE,不然为FALSE
我们可以通过取子集的方式把TURE的值取出来,就是a里面有b
a[a %in% b]
假设我们不需要TURE的值,需要FALSE这部分, 就是a里面没有b
a[!(a %in% b)]
结合ifelse函数来使用
ifelse(a %in% 1, 1, 0) #若a的值包含在1里面,输出1,否者输出0
ifelse(a %in% 1, 'yes', 'no') #若a的值包含在1里面,输出yes,否者输出no
结合which函数来使用
which(a %in% 1) #输出x包含在1中值的位置
ifelse(a %in% b, which(a==b), 0 ) ##若a的值包含在b里面,输出a==b的位置,否者输出0
下面我们使用一个实例数据来演示
先导入我们的数据
bc<-read.csv("E:/r/test/kuanggong.csv",sep=',',header=TRUE)
这是一个矿工的数据(公众号回复:矿工数据,可以获得数据),主要是研究镍冶炼工人,包括接触、随访期和死亡原因的信息。一共有12个变量。Agr年龄段,这里5岁为一个年龄段。Ygr出生年份周期,也是5年为一段,icd死亡诊断的icd编码,exposure为暴露指数,agein随访开始时的年龄,ageout随访结束时的年龄,lung每百万人年肺癌死亡率。
假设我们想了解镍冶炼工人的肺癌死亡率,icd编码中162,163为肺癌诊断,我们先生成一个肺癌的指标
bb<-within(bc,lung.cancer<-as.numeric(icd %in% c(162,163)))####添加肺癌这个变量,对应的icd为162和163
使用ifelse语句也是一样的
bb$lung.cancer1<-ifelse(bc$icd %in% c(162,163), 1, 0)
这样我们就把icd中162和163的变量设置为肺癌中的1,不是的设置为0,我们这里把1当做数字来计数,我们可以通过tapply函数来创建年龄与肺癌发生率的风险表
pyr<-tapply(lung.cancer,list(ygr,agr),sum)#汇总风险次数
癌症病例计数
count<-tapply(lung.cancer,list(ygr,agr),sum)
最后可以算出千人年发病率
fbl<-count/pyr*1000