我有一个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
});
但是,现在对于每个数据对象,添加的新列名称值未定义,而原始列名称和值保持不变。
答案 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.csv
和d3.tsv
接受访问者。