[R] cbind和filter函数的坑
最近我用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)
可见,数据格式的问题不容小觑。而且这种问题如果没报错是很难发现的,这里还是因为结果不合常理才及时返回去查看和改正。
[R] cbind和filter函数的坑的更多相关文章
- [R]R下as.Date()函数的坑
问题描述: 在本地使用as.Date()函数从POSIXct类型中提取date时,出现了日期不一致的错误.导致处理数据时,总是出问题. 还好被领导发现数据有误,不然这个bug不知道还要潜伏多久.尽管如 ...
- [R语言]R语言计算unix timestamp的坑
R+mongo的组合真是各种坑等着踩 由于mongo中的时间戳普遍使用的是unix timestamp的格式,因此需要对每天的数据进行计算的时候,很容易就想到对timestamp + gap对方式来实 ...
- python基础——filter函数
python基础——filter函数 Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函 ...
- filter()函数 条件筛选
filter()函数 filter()函数是 Python 内置的另一个有用的高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 ...
- python的filter()函数
filter()函数是 Python 内置的另一个有用的高阶函数. filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,fil ...
- Python 特殊函数解析(lambda 函数,map 函数,filter 函数,reduce 函数)
写在之前 今天给大家介绍几个比较特殊的函数,他们具有函数式编程的特点,有人将它们视为 Python 可进行 「函数式编程」 的见证,至于什么是函数式编程,不是本篇文章的重点,感兴趣的可以去了解一下.老 ...
- python中的zip、map、reduce 、lambda、filter函数的使用
飞机票 lambda函数 lambda只是一个表达式,函数体比def简单很多. lambda的主体是一个表达式,而不是一个代码块.仅仅能在lambda表达式中封装有限的逻辑进去. lambda表达式是 ...
- map函数和filter函数 zip函数
1.map函数 接收一个函数f和一个可迭代对象(列表,字典等),并通过把函数f依次作用在li每个元素上,得到一个新的list并返回 # -*-coding:utf8 -*- import reques ...
- Python小白学习之路(十五)—【map()函数】【filter()函数】【reduce()函数】
一.map()函数 map()是 Python 内置的高阶函数 有两个参数,第一个是接收一个函数 f(匿名函数或者自定义函数都OK啦):第二个参数是一个 可迭代对象 功能是通过把函数 f 依次作用在 ...
随机推荐
- HCNP Routing&Switching之BGP防环机制和路由聚合
前文我们了解了BGP路由宣告相关话题,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/15440860.html:今天我们来聊一聊BGP防环机制和路由聚合相关话题 ...
- 单片机stm32串口分析
stm32作为现在嵌入式物联网单片机行业中经常要用多的技术,相信大家都有所接触,今天这篇就给大家详细的分析下有关于stm32的出口,还不是很清楚的朋友要注意看看了哦,在最后还会为大家分享有些关于stm ...
- Machine learning (8-Neural Networks: Representation)
1.Non-linear Hypotheses 2.Neurons and the Brain 从某种意义上来说,如果我们能找出大脑的学习算法,然后在计算机上执行大脑学习算法或与之相似的算法,也许这将 ...
- python文件读写及修改
转载:https://www.cnblogs.com/zhxwind/p/8761618.html 文件的读写有三种形式:读.写和追加. 一.读模式 r 和读写模式 r+ 1.读模式 r 读模式r特点 ...
- Des加密解密(公共方法)
1 public class Des 2 { 3 public static string Encrypt(string message, string key) 4 { 5 DES des = ne ...
- Linux 内核网桥源码分析
Linux网桥源码的实现 转自: Linux二层网络协议 Linux网桥源码的实现 1.调用 在src/net/core/dev.c的软中断函数static void net_rx_action(st ...
- ReentrantLock & AQS
概念 Syncronized由于其使用的不灵活性,逐渐的被抛弃~ 常用解决方案,有以下三种使用方式:(暂时的不考虑condition的应用,暂时还没有总结出来) 同步普通方法,锁的是当前对象. 同步静 ...
- 在线编辑Word——插入图表
在Word中可插入图表,配合使用表格能够更加全方位的展示数据的可信度并增加数据的可读性.本文将通过使用在线编辑器 Spire.Cloud Word 演示如何来插入图表,并设置相关格式化操作.具体步骤如 ...
- SpringCloud升级之路2020.0.x版-30. FeignClient 实现重试
本系列代码地址:https://github.com/JoJoTec/spring-cloud-parent 需要重试的场景 微服务系统中,会遇到在线发布,一般的发布更新策略是:启动一个新的,启动成功 ...
- Java经典面试题-不古出品
@ 目录 一.Java 基础 1.JDK 和 JRE 有什么区别? 2.== 和 equals 的区别是什么? 3.两个对象的 hashCode()相同,则 equals()也一定为 true,对吗? ...