将2个具有相同行数的可变数据框组合到Google脚本中的1个单个数据框

时间:2019-03-04 08:55:43

标签: javascript html google-apps-script google-sheets google-sheets-macros

我有2个数据帧。

几次数据操作后的第一个数据帧如下

Date
1/2/2019
1/3/2019
1/4/2019
1/5/2019
1/6/2019
1/7/2019
1/8/2019
1/9/2019

第二个数据框是从Google表格获得的范围,看起来像这样

DATA	UCL
0.005	0.015
0.005	0.015
0.005	0.015
0.005	0.015
0.005	0.015
0.005	0.015
0.005	0.015
0.005	0.015

我如何结合这两个变量以形成可以传递的单个数据帧。

看起来像这样

Date	DATA	UCL
1/2/2019	0.005	0.015
1/3/2019	0.005	0.015
1/4/2019	0.005	0.015
1/5/2019	0.005	0.015
1/6/2019	0.005	0.015
1/7/2019	0.005	0.015
1/8/2019	0.005	0.015
1/9/2019	0.005	0.015

这是当前代码

    var Bvals = sheet.getRange("B12:B").getValues(); 

    var Blast = Bvals.filter(String).length; 

    var daterange = sheet.getRange(firstrow, 1, Blast, 1); 

    var Dateconverted = Utilities.formatDate(daterange, "GMT", ""EEE MMM dd yyyy");  

    range = sheet.getRange(firstrow, 2, Blast, 3);  

    var datarange2 = range.getValues();   

Dateconverted是第一个数据帧,datarange2是具有2列的第二个数据帧。我希望将这2个数据帧合并为Var Data3 = {将这2个数据表合并为一个数据表的一些代码}

1 个答案:

答案 0 :(得分:0)

范围基本上是一个二维数组,其工作方式类似于valueOfCellInRange = range[rowIndex][columnIndex],因此要“扩展”每一行以包括来自不同范围的两行的值,您应该能够执行以下操作:

var newRangeValues = [];
for (var i = 0; i < dataRange1.length; i++){
  // Length of the outer array will be the number of rows to loop through
  //   (assumes the two source ranges have an equal number of rows)
  var combinedRow = dataRange1[i].concat(dataRange2[i]); 
  // dataRange1[i] will hold a one-item array like ["Date"]
  // dataRange2[i] will hold an array like ["DATA","UCL"]
  // concat() will merge them into one array

  newRangeValues.push(combinedRow);
}
myTargetRangeOnSheet.setValues(newRangeValues);

注意:我尚未在Google表格中测试此代码,但它应该与您要尝试的代码非常接近。 (而且您可以检出此explanation of the concat method中的数组。)

它在代码段中只是为了表明它在浏览器中有效:

const dataRange1 = [
  ["Date"],
  ["1/1/19"]
];
const dataRange2 = [
  ["DATA", "UCL"],
  ["DATA thing", "UCL thing"]
];
const newRangeValues = [];

for (let i = 0; i < dataRange1.length; i++){
  const combinedRow = dataRange1[i].concat(dataRange2[i]); 
  newRangeValues.push(combinedRow);
}
console.log(newRangeValues);