我们经常用到替换,最常用的命令是sub或者gsub,这两个命令相当强大,但是也有缺点,比如每次只能操作1个替换对象,如果需要批量替换,则需要替换很多次,而且不能作用于数据框和矩阵。
基于此,我重新封装了gsub命令,写了Replace和Replace0两个命令,来更加灵活地替换,并将这两个命令放入do包(data operator)。
该命令有2大优势:
优势1:适用于多种数据类型,包括:数字、字符串、向量、数据框、矩阵,不适合于列表和数组。
优势2:3种替换模式。
模式1、多个替换为1个,比如讲a、b、c都替换为d
模式2、单个替换为单个,比如同时实现a替换b,c替换为d,3替换为4
模式3、以上2种模式同时使用:注意,优先处理模式1,然后再处理模式2.
首先安装do包:
install.packages("do")
调用do包
library(do)
1、数字替换
①多个替换为1个:如将3个数字145,124,154种的1替换都为6
Replace(data=c(145,124,154),from=1,to=6)输出的结果[1] "645" "624" "654"
上面的命令中,data是我们处理的数据,from是替换的对象,to是替换成的目标。
②单个替换为单个:还是上面的数据,把1替换为6,5替换为7
replace(data=c(145,124,154),pattern=c("1:6","5:7"))输出的结果[1] "647" "624" "674"
上面的命令中,data是我们处理的数据,pattern即是单个替换单个模式,每一个替换模式都要用引号引起来,第一个替换是1替换成6,冒号前面是from,冒号后面是to,所以 "1:6" 就是1替换为6,"5:7" 就是5替换为7。
③两种模式同时:优先处理模式1,后处理模式2.
将3个数字1234,1567,8746,将1和2替换为9;3替换为8,6替换为0
replace(data=c(1234,1567,8746), from=c(1,2),to=9, pattern=c("3:8","6:0"))输出的结果:[1] "9984" "9507" "8740"
2、字符串替换
和数字替换完全类似,举一个模式3的例子
将monday、tuesday、thursday中的a和y替换为ok;s替换为h,d替换为e
Replace(data=c("monday","tuesday","thursday"), from=c("a","y"),to="ok", pattern=c("s:h","d:e"))输出的结果:[1] "moneokok" "tueheokok" "thurheokok"
3、数据框和矩阵※※※
数据框和矩阵的操作完全一样,当对数据框和矩阵操作的时候,更能显示Replace的优势,比如,我们有一个数据框df
df var1 var2 var3 123 abc 1a2b 125 bcd 4b6 653 jhg j4h
现在我们来展示模式3.
我们想去掉数据中的1和a;
将5替换为7,将a替换为z,将b替换为k,将h替换为e
Replace(data = df, from = c("1","a"),to = "", pattern = c("5:7","a:z","h:e"))输出的结果: var1 var2 var3 23 bc 2b 27 bcd 4b6 673 jeg j4e
如果想把谁去掉,那就把to赋值空字符串"",就可以了。
4、Replace0
很多时候,我们需要把某些内容去掉,所以,为了方便,我写了Replace0,最后是零(0),不是英文字母欧(O),Replace0中只有data和from,没有to,也没有pattern,因为它的目的就是去掉。
比如,我们去掉df数据框中的a、b和1
Replace0(data = df,from = c("a","b","1"))输出的结果: var1 var2 var3 23 c 2 25 cd 46 653 jhg j4h
5、正则表达式※※※
Replace是封装了gsub命令,所以理所当然支持正则表达式。
我们要去掉df中的0到4的数字,和a到e的字母
Replace0(data = df,from = c("[0-4]","[a-e]"))输出的结果: var1 var2 var3 5 6 65 jhg jh
总结:Replace命令通过from和to实现多替换为1的功能,通过pattern实现多次1对1的替换,两者结合使用,可以非常方便。Replace0命令实现同时去掉多个对象的功能。Replace和Replace0都支持正则表达式,这一点非常重要。
彩蛋
站长收集了除了CxT公司的信号通路以及R语言学习卡片的高清pdf文件
比如:
表观遗传学
肿瘤免疫
上皮间质转化EMT
RNA甲基化
细胞死亡
R语言学习卡片
等等......
获得方式
1、分享此文到朋友圈24小时无删除或者分享此文到3个微信群(人数>300)
2、截图直接在微信公众号内回复即可。。
资料收集不易,用2000行代码写的网站工具更不易,为了宣传一个免费又强大的网站工具,麻烦大家了~
One More Thing......
小站粉丝VIP群。
为了更好的与粉丝交流,站长组建了VIP群,加入都是随缘热心肠的小伙伴。除了答疑之外,大神还经常讨论一些热门话题,课题、文章、国自然、生信、八卦,站长有什么新的想法和关于小站工具处于开发阶段的功能也会提前放到群里。
此群采用59元会员制,群里还有名额,如果大家感兴趣可以加站长微信,发59元红包,站长拉你入群。
入群可以获得
1、2019年生命科学部
2、2019年医学部所有中标名单
3、2017年肿瘤口中标项目摘要
4、RCheatsheets学习卡片和其他资料