首页 > 编程知识 正文

ds是什么意思啊,电视剧

时间:2023-05-03 16:38:03 阅读:285608 作者:2434

记录一个刚刚用本‘笨’办法解决的数据清洗和数据整理问题

前几天收到邮件,对之前我一篇论文的方法进行测试的时候有些疑问。我在复现的时候遇到了以下的问题:

我现在有三个结果,res1, res2 和 res3,他们的结构基本是一致的,都是两列:

N8N84N18N4N22N64N10N17...M0P1 M0P2...

如果不用 Python,只用 Excel, 如何找出三个结果中的重复值?(N2-N1视为与N1-N2等同)

我的笨办法(不用 VBA)

首先,分别按照编号大小左右排序,再从小到达按列排序,最后拼接字符串。然后只要找出三个结果中的重复值并高亮就行了。

首先,将数据清理一下。因为 M0P 开头的数据只有 M0P1 和 M0P2,我直接通过查找替换将所有 M0P1 换为 1001,M0P2换为1002(1001是因为N*中没有大于500的值,所以1001可以保证 unique)。

然后,我们将第二列向右移动一列,因为空出的这一列要放分列的输出。我们通过文本分列向导(数据->分列)将所有N*拆分成N和数字。如果选择按数据的“分隔符”进行拆分并将N设置为分隔符,则可以直接提取数字(这个在窗口预览的时候就能看到。具体可以参考微软的这个教程)。由于之前已经把M0P*转换为数字了,所以分列后这些1001、1002不会动;对于这两列,我们分别进行分列操作,这时所有N*中的数字则会以一个新列的形式出现在列旁。之后我们只要所有处理好的数据归回成完整的两列,我们的数据清理就完成了。

(Copyright © https://blog.csdn.net/s_gy_zetrov. All Rights Reserved)

数据现在长这样:

88418422641017...1001 1002...

之后,我们需要进行按行排序,这一步直接做的话我试了一些方案,都不行,除非用 VBA,否则都不能自动化操作。因为我的每行就两个数字,所以我们可以使用LARGE来实现类似排序的效果。假设我们第一列为excel的A列,第二列为B列,则使用=LARGE(A1:B1,2)就可以找出二者中小的数字,=LARGE(A1:B1,1)则找出二者中大的数字(具体参考这篇微软的教程:“If n is the number of data points in a range, then LARGE(array,1) returns the largest value, and LARGE(array,n) returns the smallest value.”)

这步完成后大概数据变成这样:

A B C D884 8 84184 4 182264 22 641017 10 17...1001 1002 1001 1002...

之后我们直接对C列(每行的最小值)进行按列排序就好,excel会帮我们扩展到全部四列(Copyright © https://blog.csdn.net/s_gy_zetrov. All Rights Reserved):

A B C D184 4 18884 8 841017 10 172264 22 64...1001 1002 1001 1002...

最后一步,为了比较重复值,我们需要将CD列挤成一列,这里是用拼接函数=CONCATENATE(C1,"_",D1)然后一样拉到底使其apply到所有行:

A B C DE184 4 184_18884 8 848_841017 10 1710_172264 22 6422_64...1001 1002 1001 10021001_1002...

将三个结果粘进一个 Excel 文件中,假设拼接字符串的列在E、J、O,则全选这三列,选择“条件格式”->“重复值”,所有重复出现的字符串就会被高亮出来了!(具体参考这篇微软教程)。

至此,问题解决。办法应该是最笨的一种了,但优势是不需要VBA,对没有编程背景知识的用户(Copyright © https://blo友好g.csdn.net/s_gy_zetrov. All Rights Reserved)。

以上。

(Copyright © https://blog.csdn.net/s_gy_zetrov. All Rights Reserved)

visitor tracker

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。