【问题标题】:how to distinct same keys in first line with d3.csv如何用 d3.csv 区分第一行中的相同键
【发布时间】:2014-08-11 11:38:33
【问题描述】:

d3.csv 自动将第一行识别为键名。 那么,如果第一行包含同名键,我们就无法读取所有数据,d3.csv 只能读取一列。

csv 示例(Z 是相同的键)

X,Y,Z,Z
1,4,7,10
2,5,8,11
3,6,9,12

我想读取与相同键对应的两个数据(本例中为Z)。 也许我们无法使用d3.csv 函数提取“10,11,12”。

你能告诉我如何阅读这两列吗?

【问题讨论】:

    标签: javascript csv d3.js


    【解决方案1】:

    d3.csv 无法提取完整数据是正确的。

    但是,如果您有自定义数据格式,请使用d3.text 将数据加载为文本文件。 然后您可以使用 d3.csv.parseRows 以您的自定义格式解析它。

    这将为您提供一个数组数组,然后您可以d3.transpose 查找您的列。

    【讨论】:

      【解决方案2】:

      根据@musically_ut 的回答,您可以执行以下操作:

      d3.text("txt.csv", function(err, txt){
          var rows = d3.csv.parseRows(txt),
              header = rows.shift(),
              data = rows.map(function(r){
                  var obj = {};
                  r.forEach(function(c, i){
                      if (!(header[i] in obj))
                          obj[header[i]] = c;
                      else
                          obj[header[i]] +=  " " + c;
                  });
                  return obj;
              });
      });
      

      在这里,与d3.csv 一样,您正在为 CSV 文件的每一行创建一个对象,其键对应于列名。与d3.csv 不同,如果两列具有相同的名称,则此方法只是将两列中的数据附加在一起(参见下面的示例)。

      如果您使用此方法输出生成的data,您会得到以下结果:

      >> console.log(JSON.stringify(data));
      [{"X":"1","Y":"4","Z":"7 10"},
       {"X":"2","Y":"5","Z":"8 11"},
       {"X":"3","Y":"6","Z":"9 12"}
      ] 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-08-24
        • 2023-03-13
        • 2017-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-07
        相关资源
        最近更新 更多