缺失值造成数据表中部分行的列数不等,怎样处理比较好?

最近遇到了一个比较棘手的数据表。

表中本来是没有|的,为了叙述方便,我截取一部分在org-mode下整理了之后,长这样:

| gender | year_of_birth | days_to_birth | vital_status | days_to_death |
|--------+---------------+---------------+--------------+---------------|
| male   |          1929 |        -26377 | Dead         |          2393 |
| female |          1929 |        -25132 | Dead         |           999 |
| female |          1937 |        -24057 | Dead         |          1492 |
| female |          1949 |        -23062 | Dead         |           193 |
| female |          1938 |          Dead | 905          |            69 |
| male   |          1937 |          Dead | 1171         |            68 |
| female |          1944 |        -22875 | Dead         |           339 |

本来应该按照\t或空格分列,三列之间该出现两个\t,但由于缺失值和数据存储格式的关系,有的地方只有一个,这就造成一些数值所处的列发生的错乱,比如[4:6,2]那两处,应该在[4:6,3]才对,后边的顺延。但是很多行的缺失都不止一处,而导致错乱的次数也是不固定的。

我也试过用关键字把需要的信息提取出来,性别、状态这种还好,天数由于没有取值范围,跟年份19XX、20XX无法区分,跟两位数的年龄也无法区分;如果遇到紧邻的两列都是天数或年数,也无法锁定大致范围后筛选。

原始数据来自不同团队,有些缺失确实不是技术原因,也改进不了,最终版也只能这样了。我手上这个是大概1000*30的表,手动改也不现实,我只是提取并处理些数据。

可以提供个思路吗?谢谢!

所以你要做什么? 整理org table?用r读取? 如果是近邻数字不好分别的,只能回头找原团队了,否则人眼都分辨不出来 至少用csv

文件是.tsv格式,我看也是纯文本,除了用\t替换,以外,跟csv看起来没区别。

我是想提取一些列并进一步分析的,比如以性别分组。

公共数据库,原团队是找不到的;倒是有json文件,不过我还不会批量提取。

会json的人应该很多的 可以写个脚本批量提取

还是从json这块想办法吧,这个表格是废了,如果人都无法分辨的话,写程序都没法写。

你这数据看起来像病例对照或者队列研究的数据,公卫的项目?

我是公卫的,这数据是肿瘤相关的。

你看能不能把所有能想到的约束都写出来,这我看上去不光有些列有取值范围,还应当有几列之间的相互关系。对每个有缺失的行,复原其所有可能的状态,仅有一个满足约束的留下,有多个的去掉。

2 个赞

有原始数据的话,用pandas吧,比较简单,json也能直接读。