“ tidyr的separate_rows及数据预处理
”
生活科学哥-R语言科学 2020-10-08 7:03 赶上长假的尾巴,今天早起处理一个朋友的简单的R问题,这里给大家分享一下。问题很简单,但是需要一点点数据的预处理:针对一数据框中的数据,某一列里的数据,进行拆分,生成更多的行,具体情况下面作一介绍。
原始的数据及想要的图
为了演示这个原始数据,我这里生成了一个虚拟的数据,结构如下:
> dat2 id col.4.separate str1 1 a-x/y/z a2 2 bb-1/2/3 b3 3 c-3 c4 4 d-x1/x2/x3 d5 5 e-5 e6 6 f-6 f7 7 g-7 g8 8 u/v/w h
可以看到, 在该数据中,我们的第1,2,4,8列中,有/作为分隔符,实际上这些行中包含了三项,以第1行为例,实际应该是a-x,a-y与a-z,我们要做的,就是根据这个条件,进行分行,所以,任务有两个:
先找出要分行的行,并且补全(比如将a-x/y/z变成a-x/a-y/a-z)
用separate_rows()进行分行。
实现过程
我们通过下面的实际例子,来看看如何作图:
dat2"dummy.csv",stringsAsFactors = FALSE)rownum.4.separate,#找出同时有-与/的列,作为补全的对象rowtoreplace2]#要补全的列string.eachrow".*(?=\\-)")#提取这些补全列的字符(比如第一行的a-string.eachrow"/",#加上/与-for (i in 1:length(rowtoreplace)){
rowtoreplace[i]=str_replace_all(rowtoreplace[i],"/",string.eachrow[i]) }#依次替换dat2[rownum,2]=rowtoreplacedat2.4.separate,sep=#最终的分行# A tibble: 16 x 3 id col.4.separate str <int> 1 1 a