顿悟了R,excel将一去不返

今天是生信星球陪你的第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

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181029G0U0FZ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券