我主要使用R进行数据分析,但我希望在LibreCalc中为我的数据集提供更简单的预先修复。基本上,我有一个我正在收集的数据集用于该领域的研究,为了方便起见,我使用逗号分隔同时行为。我想,现在,将行为分为新行以供后续分析,但我想复制同一行中的其他信息。
所以,如果我有:
Time Date Focal Behaviors Actor Target Observer
2:00 01/22/18 QN a, pg, w QN NU AJP
2:01 01/22/18 QN g QN NU AJP
2:02 01/22/18 QN z, 3 QN NU AJP
我想要:
Time Date Focal Behaviors Actor Target Observer
2:00 01/22/18 QN a QN NU AJP
2:00 01/22/18 QN pg QN NU AJP
2:00 01/22/18 QN w QN NU AJP
2:01 01/22/18 QN g QN NU AJP
2:02 01/22/18 QN z QN NU AJP
2:02 01/22/18 QN 3 QN NU AJP
请注意,为了清楚起见,我在此处列出了一些其他信息以及其他信息。此外,我还没有在LibreCalc中编码,所以如果您(善意地)提供有用的脚本,请提供注释。
我真的希望有人有一个明确的答案,感谢你有时间阅读这篇文章,无论你是否有解决方案!
另外,我在'R'下交叉列出了这个,因为有人有简洁的代码来自动导入,进行更改,并导出到LibreCalc文件(如.xls或.odf);我有多张床单。
答案 0 :(得分:0)
在Calc中,转到文件 - >另存为 - >文字CSV(.csv)。在R中运行代码进行修复,然后将修改后的CSV文件导回Calc。
还有https://extensions.openoffice.org/project/R4Calc,但它需要将LO SDK与R链接,这并不容易。
目前,LibreOffice缺少Sub foo()
Dim ws As Worksheet: Set ws = Sheets("Sheet1")
Dim wsResult As Worksheet: Set wsResult = Sheets("Sheet2")
'declare and set your worksheet, amend as required
LastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
'get the last row with data on Column A
For i = 2 To LastRow 'loop through rows
For x = 15 To 23 'loop through columns
If ws.Cells(i, x) = "FLAG" Then 'if FLAG found in column
NextFreeRow = wsResult.Cells(wsResult.Rows.Count, "A").End(xlUp).Row + 1 'get the next empty row of your wsResult sheet
ws.Range("A" & i & ":C" & i).Copy 'copy first three cells in given row
wsResult.Range("A" & NextFreeRow).PasteSpecial xlPasteAll 'paste into your Result sheet
ws.Cells(i, x - 11).Copy 'copy the value for which there was a flag
wsResult.Cells(NextFreeRow, 4).PasteSpecial xlPasteAll 'paste in the fourth cell in the sheet wsResult
End If
Next x
Next i
End Sub
来方便地拆分逗号分隔的单元格。 Lupp将其实现为在https://ask.libreoffice.org/en/question/143252/how-to-find-values-present-in-different-sheets-and-copy-them-in-calc/?answer=143289#post-id-143289基础上用Basic编写的宏。
LO Base也可用于解决此类问题,如我对同一问题的回答中所述。但是,在这种情况下,我认为导出为CSV是您的最佳选择。