今天是生信星球陪你的第172天
你想找辆共享单车,发现满街都是别家车,没有一辆你能骑。
你想学点生信,搜了“初学者教程”,满眼尽是高大上,没有一句能看懂。
终于你跨越茫茫宇宙,来到生信星球,发现了初学者的新大陆!
excel是最常用且功能强大的表格处理软件,但常规操作虽好,却不可重复!同样的表格,需要重复时就只能再搭上一倍的时间。
还是卖U盘的小烦恼,尽管找了第三方发货,我还是需要导出发货列表并整理,然后将他们返回给我的单号整理成批量发货要求的格式和样子。这两件事几乎每次需要耗费两小时!
作为一个追求高效且强迫症的小员工,我已经想好了偷懒办法。
微店导出发货列表,足足有51列!发货部门只需要姓名地址电话就够了!给别人提交信息时,绝不应该带废话。以前都是手动删除,虽然麻烦但也能完成。
今天遇到了一个问题,我提交给发货部门的地址,他们要求分列,就是分出省、市、区、详细地址四列。
要求是这样
然而我们的收货地址导出是这样的:
箭头所指是空格
分列吗?首先想到tidyr里的separate
但是问题来了,separate是有自己的小脾气的:
如果不指定,就自动识别分隔符
用into=c()参数定义的不仅是列名,还有列数。换言之,如果你的c()中有两个列名,那就是分成两列。
那么如果你要分的单元格分出的数量与你定义的列数不同会怎么样?
看下面的例子:
原数据框
不指定分隔符,指定分两列
不指定分隔符,指定分三列
因为没有定义分隔符,所以自动识别了空格和“.”都是分隔符。所以 K 0.7可以被分成3列!比你定义的列名多一列,所以多出来的那一列被丢弃了。如果你指定分三列,那么剩下两行分不出三列的,第三列就是NA。
回到我的实际问题
简而言之,我要分四列,却有5个空格分隔符。其实只是第一行有5个而已。后面几行也有有三个、四个、六个的。但有一个统一规律,地址都是省、市、区、详细地址。多出来的分隔符都在详细地址里。
如果直接去分,得到的结果是这样的:
后面的详细地址被丢弃了!警告信息看下
警告信息里说了,多出来的被丢弃了,少的被填上了NA。
此处突然恍然大悟,为什么上次发货有几个通知我地址不全呢?之前没跟我说需要分列,所以直接把导出的地址交上了。后来出现地址不去,工厂告诉我是他们发货导出地址出了问题,一定就是这个原因啊!有空格,分列多出来的被丢弃了!
倒霉的快递又是送到对应的城区,然后联系发货人补全地址,然后才给派送!要不就成了疑难件。吐槽ing,为啥没有仔细检查,快递为啥到了城区不能自己联系收件人问地址呢。
但是呢。外包业务,不能要求太多。所以我今天探索了一个正确的做法,哦耶。
既然你空格太多,而我只要前三个,那就把前三个空格换成“。”,再指定分隔符为“。”不就可以啦!(这个分隔符可以自己改,就是注意不能是地址里已经有的)
然后我就用到了昨天刚学到的正则表达式-替换匹配的内容,刚记住了正则表达式默认一个字符串只匹配第一个。既然要换三个,那就来三次吧!
,结合我用的非常顺手的dplyr那就可以咯。不过这里是我自己想出来的,应该还是算个笨办法,以后有学到新方法再来改进!
批量发货模板
所以返回发货单号后,再来这个脚本就大功告成,直接导出了微店批量发货要求的xlsx格式。
大功告成!
隔壁生信技能树公益视频合辑(学习顺序是linux,r,软件安装,geo,小技巧,ngs组学!)
国内看B站,教学视频链接:https://m.bilibili.com/space/338686099
国外看YouTube,教学视频链接:https://m.youtube.com/channel/UC67sImqK7V8tSWHMG8azIVA/playlists
领取专属 10元无门槛券
私享最新 技术干货