查看原文
其他

对表型数据框进行去冗余

生信技能树 单细胞天地 2022-06-07

上次GEO课程回答了学员问题:使用R语言在向量的任何位置插入任何元素 实力演示了如何自定义函数,这样大家就可以无限制创造方法来解决自己特殊的需求,课后一个月的答疑期,发现大家还是有各式各样的问题,比如下面的表型信息;

很明显,有些信息是冗余的,有些是有效信息可以用来分组,但是表型记录太多,看起来会混淆,所以需要去除那些冗余信息,就是在所有样本里面表型记录都一致的列。

然后我发现, 非常多的学员都无从下手,其实就是数据框取子集,我一直强调了3种方法,坐标、列名和逻辑判断,这个时候很明显应该是逻辑判断,就是看看每一列是否是冗余信息。我们来举一个例子,下面的代码创建一个模拟的表型信息;

pd=data.frame(1:10,4,7,3,'a','d',
              LETTERS[1:10],letters[1:10],
              c(rep('a',5),rep('b',5)))

如下所示,只有第1列和最后3列是有信息的,中间的列在所有行都是同一个元素,就是我们所认为的冗余信息,需要去除。


我们首先判断第一列非冗余元素的个数,下面的代码

length(unique(pd[,1]))

然后对每一列都使用同样的代码,那就是apply技巧:

apply(pd, 2function(x){
  length(unique(x))
})

这个时候里面的x就是每一列。

这样虽然是判断了每一列的非冗余元素个数,但并不是逻辑值,没办法去用来对数据框取子集。

需要加上一个判断,就是元素个数大于一才保留;

apply(pd, 2function(x){
  length(unique(x)) > 1 
})

现在就是依据每一列返回一个逻辑值,这个逻辑值就可以去原始数据框里面进行取子集操作;

pd[,apply(pd, 2function(x){
  length(unique(x))>1
})
]

是不是很简单!

再次强调3种方法数据框里面进行取子集操作,坐标、列名和逻辑判断,其中逻辑判断是最常见的。


marker基因的表达量可视化

差异分析及可视化

细胞亚群的生物学命名

Seurat标准流程

配置Seurat的R语言环境

10X scRNA免疫治疗学习笔记


如果你对单细胞转录组研究感兴趣,但又不知道如何入门,也许你可以关注一下下面的课程

生信技能树(爆款入门培训课)全国巡讲约你

(福州、上海见!)全国巡讲第19-20站(生信入门课加量不加价)




您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存