公众号的读者留言问答的问题,首先他的数据集如下

R语言操作otu丰度表:分行列计算平均和标准差_公众号 image.png

他想算的问题是

R语言操作otu丰度表:分行列计算平均和标准差_标准差_02 image.png

我的理解如下

R语言操作otu丰度表:分行列计算平均和标准差_标准差_03 image.png

1 这个是数据集按行求平均

R语言操作otu丰度表:分行列计算平均和标准差_标准差_04 image.png

2 这个是数据集中按行求标准差

R语言操作otu丰度表:分行列计算平均和标准差_数据集_05 image.png

3 这个公式的计算方法是先按照行求平均值得到一个向量a,按行求标准差得到一个向量b,最后是按照列来进行abs(x-a)/b

R语言操作otu丰度表:分行列计算平均和标准差_数据集_06 image.png

4 这个公式就是把3得到的新数据集按照行求和然后再除以数据的维度

代码如下

library(readxl)
library(tidyverse)

​readxl​​包用来读取数据

​tidyverse​​用来操作数据

​readxl​​​中的​​read_excle()​​函数好像没有指定某一列作为行名的函数,所以我给原始数据添加一个表头

R语言操作otu丰度表:分行列计算平均和标准差_标准差_07 image.png

读取数据

read_excel("example.xlsx") %>% 
column_to_rownames("sample") -> df
dim(df)
df

R语言操作otu丰度表:分行列计算平均和标准差_标准差_08 image.png

按照行求平均值和标准差

sample_mean<-apply(df,1,mean)
sample_sd<-apply(df,1,sd)

自定义函数求下面的公式

R语言操作otu丰度表:分行列计算平均和标准差_数据集_05 image.png

myfun<-function(x,y,z){
return(abs(x-y)/z)
}

apply(df,2, myfun,sample_mean,sample_sd) -> newdf
newdf

R语言操作otu丰度表:分行列计算平均和标准差_数据集_10 image.png

计算最后的avd

apply(newdf,1,sum)/(ncol(df)*nrow(df))  -> avd
avd


今天推文的示例数据和代码可以在公众号后台留言20210925获取


欢迎大家关注我的公众号

小明的数据分析笔记本


小明的数据分析笔记本 公众号 主要分享:1、R语言和python做数据分析和数据可视化的简单小例子;2、园艺植物相关转录组学、基因组学、群体遗传学文献阅读笔记;3、生物信息学入门学习资料及自己的学习笔记!