R语言-均值填充缺失值

Python011

R语言-均值填充缺失值,第1张

在基因芯片数据或其他类型数据中,采用计算所有样本的平均值从而进行填充,如果需要用中位数或其他统计量填充时只需修改相应的方法即可

#1. 检查是否有缺失值

which(is.na(mRNA),arr.ind = T)

#2. 计算行均值并填充

#该数据中探针(基因)为行(名),样本为列(名),(数据框内容为表达量数据值型数据数据)格式可见文章最后

row_mean <- apply(mRNA,1,mean,na.rm =T) #1是行,2是列,若用其他方法修改mean即可

mRNA$MEAN <- row_mean

ncol = 样本数

for (i in 1:nrow(mRNA)) {

  mRNA[i,is.na(mRNA[i,])] <- mRNA[i,ncol]

}

之前我们讲了向量,向量就仿佛一个一维数组一样

那么我们接下来就讲讲二维数组

创建一个matrix需要用到matrix函数

martix(参数1,nrow=行数,ncol=列数,byrow=布尔值)

参数1:matrix初始化的值,如果给出的值不够matrix长度将重复赋值,如果给出的值溢出将会报错。

参数byrow:这是一个布尔值如果给定TRUE,初始数据按行顺序推进,反之按列顺序推进。

这里说一下R语言中 ' . ' 并没有特殊的意义,只是变量名的一部分

读取矩阵我们用到:矩阵名[行,列]

这里的行和列可以接收单个数组也可以接收一个向量

当然如果是负数和向量一样就是排除掉对应索引指向的值

test.m[2, ]    #取第二行,我们注意这里把列的地方空出来就是显示所有列

test.m[ ,2]     #取第二列

test.m[2,2]    #取第二行第二个

我们也可以给索引一个向量 比如3:4或者c(1,4)之类的,如上图所示,索引值也可以不连续

我们知道在二维表中 我们通常给每一行每一列取一个名字

矩阵中我们也可以这样做

首先我们给每一行每一列取一个名字,用向量保存

之后我们使用rownames(矩阵名)<-存有名字的向量给每行取名,给列取名同理见上图

取名之后我们可以用名称代替下标访问,例如:test.m['2nd','二']

看到这里,我真的觉得数据分析相关专业十分的艰难,需要用一些稀奇古怪的东西来进行数据分析

因为本人是计科专业的,平时用的数组就是单纯的数组,R语言的数组我一开始是令我怀疑人生的。

创建一个数组我们需要用到array函数

array(data=数组中的数据从1维平铺, dim=给定一个数值型向量, dimnames=list(包含一维名称的向量,二维名称....))

其中data参数用来给出数组的数据从第一维第一个开始顺序向后平铺

dim给定数组的纬度和每纬的宽度

dimnames给每个纬度的每格的名字    #这个参数可以忽略

至于如何读取数组中的数据和矩阵一致这里不再叙述,只不过把二维改成多维的情况。

我截完图发现arr[2,2,2]这个例子并不好,如果我们查看arr[3,2,1]将会显示6。

关键程序如下:

uint arr[]={ 0x7fff,0xffff,0xffff,0xffff},*p=arr

void delay (void)

{

TMOD=0X01

TR0=1

TH0=0X63

TL0=0X18

while(!TF0)

TF0=0

TR0=0

}

void ST595(void)

{

ST=0

_nop_()

_nop_()

ST=1

_nop_()

_nop_()

ST=0

}

void tiaoduan (void)

{

uchar i

}

void main (void)

{

uint x1,i, x3=0x0001

PK8255=0x80

while(1)

{

for(b=0b<64b++)

{

for(c=0c<5c++)

for(a=0a<16a++)

{

for(i=0i<4i++)

{

for(x1=0x1<16x1++)

{

SH=0

DS=p[i]&x3

_nop_()

_nop_()

SH=1

x3=x3<<1|x3>>15

SH=0

}

arr[i]=arr[i]<<15|arr[i]>>1

}

ST595()

PA8255=0x00

PB8255=0x00

if((a+b)<64)

{

PA8255=hzdot[a+b+(a+b)/16*16]

PB8255=hzdot[a+b+(a+b)/16*16+16]

}

else

{

PA8255=hzdot[a+b+(a+b)/16*16-64]

PB8255=hzdot[a+b+(a+b)/16*16-48]

}

}

for(i=0i<4i++)

{

if(p[3]&0x0001==0) //goto LP

{

p[0]=0x7fff

p[3]=0xffff

break

}

if((~p[i]!=0)&&(p[i]&0x0001!=0))

{

p[i]=p[i]<<15|p[i]>>1

}

else if((~p[i]!=0)&&(p[i]&0x0001==0))

{

p[i]=0xffff

p[i+1]=0x7fff

break

}

}

}

// LP:arr[0]=0x7fffarr[1]=0xffff