R语言 矩阵批量替换

作者: 不会生信哟 | 来源:发表于2021-05-21 10:34 被阅读0次

杀杀

最近学了几个矩阵批量替换的阳间方法,拒绝for循环!

应用:数据格式的标准化

我们在处理临床随访文件时,医生们通常会这样记录: 但是我们如果要进行生存分析或者风险分析或者其它一系列的训练-验证处理,都需要对数据进行一个标准化,把这些不统一的字符统一成计算机能够识别/区分的字符,比如0/1,或者连续型的数值。这时候我们需要批量替换。

以前我做的时候会用excel,或者在R中一列一列地进行替换,使用which之类的函数。
但是当我们需要批量替换的时候,可以使用更方便的方法:

Replace

首先是do包中的Replace函数
我想要把我数据中所有的"Primary","Female","Wildtype","Non-codel","un-methylated"都统一换成0,表示一种野生型/对照的状态
另外,数据中所有的"Recurrent","Secondary","Male","Mutant","Codel","methylated"都统一换成1,表示一种突变型的状态

library(do)
CGGA_325_clinical1 <- Replace(data=CGGA_325_clinical,from = c("Primary","Female","Wildtype","Non-codel","un-methylated"),to = 0)
CGGA_325_clinical2 <- Replace(data=CGGA_325_clinical1,from = c("Recurrent","Secondary","Male","Mutant","Codel","methylated"),to = 1)

注意替换的时候可以把原矩阵赋值给新的一个对象,以免覆盖错误导致原始信息丢失。另外最好是留下最初的矩阵,以便进行检查。

另外,需要特别注意!

Replace这个函数针对的是字符串对象,也就是说它识别的是字符串而不是矩阵或者list,这导致了重复识别的可能。比如我们有两个值‘A’,和‘NA’,这两个本身代表的是完全不同的意义,如果你先将A替换为1,然后想将NA替换为0,在代码运行时,函数会将NA里的A也替换成1,这样你的所有NA会变成N1,这样会导致后面的操作无法进行。

因此我们需要进行类似excel中“单元格匹配“的操作,也就是只有当我的字符完全匹配的时候才进行替换,我们可以使用正则表达式进行,就是在字符前后加上^和$

test_data1 <- Replace(data=test_data,from = c("^\\(-)$","^F$","^wt$","^no loss$","^Un-Met$"),to = 0)

注意举例里的"^\(-)",其实我想替换的是(-),而不是\\(-),之所以加上\\是因为括号()也是正则表达式,因此我们需要加上\\去避免系统识别其为正则表达式。 因此当我们替换(+)这个符号时,需要写的式子是"^\\(\\+)",因为括号和加号都是正则表达式,都需要加上\避免系统错误识别。
类似的大家可以举一反三地写代码。

还有更重要的是!

在使用这个函数进行批量替换过后,它会自动把矩阵全部变成字符型(所以如果你需要在这个矩阵中进行加减乘除的操作请在批量替换前做):

这时候直接as.numeric强制转换成数值型,会导致我想保留的字符(比如3,4列)变成NA,把刚刚转成01的再一列列换回数值型也太无聊了,所以我一般会这么做

write.csv(test_data3,"japan_test_temp.csv",row.names = F,quote = F)
test_data3_deal <- read.csv("test_data3_temp.csv",header = T)
把数据写出去,quote=F,再读进来。其实这个方法是有好处的,首先,当你下次想使用这个数据的时候,你就不用从头处理了,只需要读入你这次写出的数据,其次将数据写出也有利于溯源。

马上变成你想要的样子~

mutate

另外一种需求是,比如说我有一列代表等级,原始的等级用希腊数字I, II, III, IV表示,我需要分别替换成1,2,3,4 这时候需要用到另一个函数mutate

library(tidyverse)
CGGA_325_clinical3 <- CGGA_325_clinical2%>%
            mutate(grade=recode(grade,"WHO I"="1","WHO II"="2","WHO III"="3","WHO IV"="4"))%>% 
                                    mutate(grade=as.numeric(grade))

我们这边使用管道操作,把四个需要替换的字符换成数值。

祝大家天天开心~

相关文章

  • R语言 矩阵批量替换

    杀杀 最近学了几个矩阵批量替换的阳间方法,拒绝for循环! 应用:数据格式的标准化 我们在处理临床随访文件时,医生...

  • R语言 矩阵

    矩阵是其中元素以二维矩形布局布置的R对象。 它们包含相同原子类型的元素。 虽然我们可以创建一个只包含字符或只包含逻...

  • 去掉“双引号”

    R语言批量去掉“双引号” 在GEO读取矩阵文件,或者其他文件的时候常常会碰到下面这样的情况 表格中的字符串带上了双...

  • 加权基因共表达网络分析(WGCNA)实例

    获取表达数据矩阵 这里运行R语言包GDCRNATools的帮助文档中的例子获得胆管癌的rna表达矩阵 使用R语言包...

  • R语言矩阵操作

    1.1 矩阵的生成 生成一个4行4列的矩阵,这里用1~16数字。 1 5 9 13 2 6 ...

  • Android Studio 批量格式化文本

    1.批量删除各种注释(Java,XML) Ctrl + R 出现以下界面:(搜索替换) 第一行输入框输入你想要替换...

  • 《学习小组Day5笔记--寒鹤》

    R语言之数据结构 今天的学习内容是R语言的数据结构。R语言的数据结构主要有向量(vector),矩阵(matrix...

  • Day5—刘强

    R语言的数据结构 数据类型 R语言主要数据类型如下: 向量(vector) 矩阵(Matrix) 数组(Array...

  • R语言的字符操作

    R语言主要擅长于数值向量和矩阵操作,但是让他去做字符串操作也可以吧。字符串的基本操作类型: 查找和替换 大小写转换...

  • R语言批量合并

    用空文件夹装好需要合并的文件。 容易遇到的问题: 1.在导入文件时,可能会出现第一列列名为“X.U.FEFF.xx...

网友评论

    本文标题:R语言 矩阵批量替换

    本文链接:https://www.haomeiwen.com/subject/hpwejltx.html