d3修改列名

时间:2016-06-27 22:13:28

标签: javascript csv d3.js

我有一个tsv文件,我使用以下代码解析:

d3.tsv(file, function(error, data) {
    data.forEach(function(d) {
        d.NAME = d.NAME;
        d.logFC = d.logFC;
        d.logCPM = d.logCPM;
        d.FDR = d.FDR;
        d.PValue = d.PValue
    });

我试图解释用户没有输入具有完全相同列名的文件的情况。更具体地说,我想说明列名是" Something.logFC"而不只是" logFC"。所以我尝试通过执行以下操作来修改列名:

d3.tsv(file, function(error, data) {
    data.forEach(function(d) {
        for (var i=0; i<d3.keys(d).length; i++){
            if(d3.keys(d)[i].indexOf('.') > -1){
                d3.keys(d)[i] = d3.keys(d)[i].split(".")[1];
            }
        };
        d.NAME = d.NAME;
        d.logFC = d.logFC;
        d.logCPM = d.logCPM;
        d.FDR = d.FDR;
        d.PValue = d.PValue
    });

但是,现在对于每个数据对象,添加的新列名称值未定义,而原始列名称和值保持不变。

1 个答案:

答案 0 :(得分:3)

使用此功能定位列名称中的点,并仅保留任何带点的名称的最后一部分:

function removeDot(d){
    Object.keys(d).forEach(function(origProp) {
        var noDot = origProp.split(".")[1];
        if (noDot != undefined) {
          d[noDot] = d[origProp];
          delete d[origProp];
        }
     });
     return d;
};

要使用此功能,请定义如下的访问者:

d3.tsv(file, removeDot, function(error, data) {
    //all your code here
});

注意:请注意,只有d3.csvd3.tsv接受访问者。