R语言由一个个基础函数组成,熟练灵活应用这些基础函数,有助于我们更好的学习R包及编程,这个专栏可能很多人不感兴趣,但是对提升自己很有帮助,感兴趣的朋友一起来学习。今天我们来介绍一下%in%函数的用法,这个函数在我们数据提取、清洗及编程中用处很大,今天我们一起来学习一下。


%in%函数的用法就是判断函数左边的向量是否在函数右边中,然后返回一个布尔值(就是正确或者错误)。我们由浅入深来体会这个函数的应用。先建立两个向量a和b.

a<-1:10
b<-c(1,3,5,9)

iris在r语言 r语言invisible_r语言

a %in% b

如图所示a和b一样放入时候为TURE,不然为FALSE

iris在r语言 r语言invisible_iris在r语言_02


我们可以通过取子集的方式把TURE的值取出来,就是a里面有b

a[a %in% b]

iris在r语言 r语言invisible_逻辑回归_03


假设我们不需要TURE的值,需要FALSE这部分, 就是a里面没有b

a[!(a %in% b)]

iris在r语言 r语言invisible_机器学习_04


结合ifelse函数来使用

ifelse(a %in% 1, 1, 0) #若a的值包含在1里面,输出1,否者输出0

iris在r语言 r语言invisible_逻辑回归_05

ifelse(a %in% 1, 'yes', 'no') #若a的值包含在1里面,输出yes,否者输出no

iris在r语言 r语言invisible_iris在r语言_06


结合which函数来使用

which(a %in% 1) #输出x包含在1中值的位置

iris在r语言 r语言invisible_逻辑回归_07

ifelse(a %in% b, which(a==b), 0 ) ##若a的值包含在b里面,输出a==b的位置,否者输出0

iris在r语言 r语言invisible_逻辑回归_08


下面我们使用一个实例数据来演示

先导入我们的数据

bc<-read.csv("E:/r/test/kuanggong.csv",sep=',',header=TRUE)

iris在r语言 r语言invisible_iris在r语言_09


这是一个矿工的数据(公众号回复:矿工数据,可以获得数据),主要是研究镍冶炼工人,包括接触、随访期和死亡原因的信息。一共有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)

iris在r语言 r语言invisible_机器学习_10


这样我们就把icd中162和163的变量设置为肺癌中的1,不是的设置为0,我们这里把1当做数字来计数,我们可以通过tapply函数来创建年龄与肺癌发生率的风险表

pyr<-tapply(lung.cancer,list(ygr,agr),sum)#汇总风险次数

iris在r语言 r语言invisible_数据_11


癌症病例计数

count<-tapply(lung.cancer,list(ygr,agr),sum)

iris在r语言 r语言invisible_逻辑回归_12


最后可以算出千人年发病率

fbl<-count/pyr*1000

iris在r语言 r语言invisible_r语言_13