最近我用cbind函数整合数据后,再用filter过滤数据,碰到了一个大坑。

以两组独立样本t检验筛选差异蛋白为例进行说明吧。

pro2 <- df2[1:6]
Pvalue<-c(rep(0,nrow(pro2)))
log2_FC<-c(rep(0,nrow(pro2))) for(i in 1:nrow(pro2)){
if(sd(pro2[i,1:3],na.rm = T)==0 && sd(pro2[i,4:6],na.rm = T)==0){
#两组的标准差都等于0时,将无法进行t检验
Pvalue[i] <- "NA"
log2_FC[i]<- "NA"
}else{
y=t.test(as.numeric(pro2[i,1:3]),as.numeric(pro2[i,4:6]))
Pvalue[i]<-y$p.value
log2_FC[i]<-log2((mean(as.numeric(pro2[i,1:3]),na.rm = T)+0.001)/(mean(as.numeric(pro2[i,4:6]),na.rm = T)+0.001))
}
}
fdr=p.adjust(Pvalue, "BH")
proTtest<-cbind.data.frame(ID=rownames(pro2),pro2,log2_FC,Pvalue,fdr,stringsAsFactors = FALSE) pro_up <- proTtest %>% filter(log2_FC>=0.58,Pvalue<0.05) #1.5倍
pro_down <- proTtest %>% filter(log2_FC<=-0.58,Pvalue<0.05)

首先,有一点我还是清楚的,就是rbind/cbind函数合并数据框时,会将加入的字符串类型强制转换为因子类型。所以我记得转换,只用cbind.data.frame函数其实也是不行的,必须加入stringsAsFactors = FALSE参数。

但是筛选的结果是上调只有5个,下调的有上千个。我马上意识到肯定是代码出现了问题,检查了很久才发现还是数据格式的问题!

我虽然对因子进行了转换,但转化后仍是字符型,而filter对字符型筛选很明显和数字不同。

所以加了以下几行进行转换,结果应该没问题了。

str(proTtest)
proTtest$log2_FC <- as.numeric(proTtest$log2_FC) #一定要转换
proTtest$fdr <- as.numeric(proTtest$fdr)

可见,数据格式的问题不容小觑。而且这种问题如果没报错是很难发现的,这里还是因为结果不合常理才及时返回去查看和改正。

最新文章

  1. [转载] Java高新技术第一篇:类加载器详解
  2. tar.xz文件如何解压
  3. PCH文件配置路径
  4. (转载)TCP/IP的三次握手与四次挥手
  5. link
  6. 161102、MyBatis中批量插入
  7. [转]就这样,创建了自己的运行时共享库(RSL)
  8. 一些常用css技巧的为什么(二)我所理解的line-height
  9. 判断IE版本的HTML语句详解&lt;!--[if IE]&gt; &lt;![endif]--&gt; - AnswerCard
  10. 例3.1 猜猜数据结构 UVa11995
  11. Android 启动过程的底层实现
  12. Activity的LaunchMode情景思考
  13. 攻入Javascript,究竟什么是AJAX
  14. Python中使用hashlib进行加密的简单使用
  15. HTTPS 站点的性能优化
  16. 软件测试第二次作业:初识JUNIT单元测试方法
  17. JavaScript实现文字跑马灯
  18. Aizu2170 Marked Ancestor(并查集)
  19. C#GDI+ 绘制线段(实线或虚线)、矩形、字符串、圆、椭圆
  20. Java并发编程(七)深入剖析ThreadLocal

热门文章

  1. 机器学习:SVM
  2. 单片机I/O口推挽与开漏输出详解(力荐)
  3. PyPi到底是什么?pypi有啥作用?PyPi和pip有何渊源?
  4. Codeforces Round #744 (Div. 3) G题题解
  5. P1231 教辅的组成(最大流)
  6. JAVA笔记4__static关键字/对象数组/foreach/方法的可变参数
  7. C++实现一个SOAP客户端
  8. 关于ENSP错误代码的常见问题
  9. Linux cat文件正常,vim文件乱码
  10. IDM使用教程:利用IDM下载百度网盘文件