【问题标题】:How to reshape data for wide to long form by monthly columns name GoogleSheet [duplicate]如何通过每月列名称GoogleSheet将数据从宽到长重塑[重复]
【发布时间】:2019-09-14 10:36:39
【问题描述】:

在 R 中,data.table 库 dcast() 可以将数据集从宽形转换为长形,我如何在 googlespreadsheet 中做到这一点?

从此格式:

          | JAN        | FEB        | MAR 
----------+------------+------------+-----------
Product 1 |          1 |          2 |          3
Product 2 |          4 |          5 |          6
Product 3 |          7 |          8 |          9

将其转换为这种格式:

Date|  Product  | Qty
-----------+-----------+----
JAN | Product 1 |   1
FEB | Product 2 |   4
MAR | Product 3 |   9
JAN | Product 2 |   4
FEB | Product 1 |   2
JAN | Product 3 |   7
MAR | Product 2 |   6
FEB | Product 3 |   8
MAR | Product 1 |   3

我们有什么解决方案来实现这一点吗?

【问题讨论】:

  • 您能解释一下从输入值中检索输出值的逻辑吗?我无法理解为什么 4 被使用了 2 次以及输出行的顺序。您的问题逻辑与this thread 不同吗?如果我误解了您的问题,我深表歉意。
  • 对不起 tanaike ,它只是一个错字 .FEB Product 2 应该是 5 。只想重塑数据格式,如 R dcast() ot melt() 函数
  • 感谢您的回复。我提出了一个示例脚本作为答案。你能确认一下吗?如果我误解了您的问题并且结果不是您想要的,我深表歉意。顺便说一句,如果可以的话,你能用你想要的正确输出来更新你的问题吗?

标签: google-apps-script google-sheets reshape unpivot melt


【解决方案1】:

这个示例脚本怎么样?

示例脚本:

当你使用这个脚本时,首先请将输入值放到单元格“A1:D4”中,然后运行myFunction()

function myFunction() {
  var sheet = SpreadsheetApp.getActiveSheet();
  var values = sheet.getRange("A1:D4").getValues(); // Retrieve values

  var result = [];
  for (var i = 1; i < values.length; i++) {
    for (var j = 1; j < values[i].length; j++) {
      result.push([values[0][i], values[j][0], values[j][i]]);
    }
  }

  sheet.getRange("A6:C14").setValues(result); // Put result
}
  • 在此示例脚本中,它假设以下情况。
    • 输入值被放入活动工作表的“A1:D4”单元格中。
    • 输出值被放入活动工作表的“A6:C14”单元格中。

结果:

其他模式:

result.push([values[0][i], values[j][0], values[j][i]]);修改为temp.push([values[0][j], values[i][0], values[i][j]]);时,得到如下结果。

注意:

【讨论】:

  • Tanaike 非常感谢,如果我想获得工作表中的所有值,为什么像 sheet.getRange(1,1,sheet.getLastRow(),sheet.getLastColumn()).getValues() 这样的脚本会出错? (粘贴在特定工作表中会被修改)
  • @rane 感谢您的回复。我无法理解你的新情况。所以我无法理解错误。我为我糟糕的技能道歉。那么您能否提供复制问题的详细信息?如果您想更改问题中的输入值,您可以将其发布为新问题吗?如果输入和输出值与您的这个问题相同,请提供详细信息(错误、输入和输出值、流程和脚本)以复制您的问题。我想确认一下您的问题。
  • 谢谢田池!发布为一个新问题:stackoverflow.com/questions/55863079/… 名称:当按月列名称 GooglespreadSheet 将数据从宽到长整形时,如何在所有单元格中出现 getRange
  • @rane 感谢您的回复和回复。我刚才看到了。我注意到已经发布了答案。我认为它会解决您的问题。
  • 田池,你太棒了
猜你喜欢
  • 2011-03-20
  • 2021-04-30
  • 2017-11-04
  • 2012-12-01
  • 1970-01-01
  • 2019-11-18
  • 2021-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多