如何根据某些ID字段合并行?
Original Table New Table
ID | Field1 | Field2 ID | Field1 | Field2
-----|------- |-------- -------|--------|-------
A 5 A 5 10
A 10 B 1 3
B 1 C 4 150
B 3
C 4
C 150
我想基于某个ID字段标识的组中的值来填充给定的单元格值。
也就是说,我要聚合表并在每列中使用非空值作为聚合函数。
答案 0 :(得分:1)
答案 1 :(得分:1)
在ID列中,使用菜单选项:Edit Cells-> Blank down 这应该给您留下一个看起来像这样的表:
ID | Field1 | Field2
-----|------- |--------
A 5
10
B 1
3
C 4
150
确保您处于“记录”模式(此选项位于数据网格的左上方)。您应该看到每个ID的行都分组在一起。
现在使用“编辑单元格”->在其他各列上连接多值单元格-对所有列完成此操作后,每条记录将只留下一行
答案 2 :(得分:0)
对于“ ID”列,请使用“基于此列添加列”:
filter(
cell.cross("ProjectName", "ID").cells["Field1"].value,
v,
isNonBlank(v)
)[0]
这将为每行标识的ID设置一个值。
Original Table New Table
ID | Field1 | Field2 | Field1_ | Field2_
-----|------- |--------|---------|--------
A 5 5 10
A 10 5 10
B 1 1 3
B 3 1 3
C 4 4 150
C 150 4 150
删除旧列。
此后,请使用“空白+刻面为空白+删除匹配的行”方法删除重复项
答案 3 :(得分:0)
这不是OpenRefine,但我认为对于OpenRefine用户而言,这是一个非常好的工具。您可以运行此Miller(https://github.com/johnkerl/miller)命令
mlr --csv reshape -r "Field" -o item,value \
then filter -x -S '$value==""' \
then reshape -s item,value input.csv
拥有
ID,Field1,Field2
A,5,10
B,1,3
C,4,150
首先,我要创建整齐的数据(https://vita.had.co.nz/papers/tidy-data.pdf)版本,然后再将其从长格式转换为宽格式
答案 4 :(得分:0)
使用cross()函数,您也可以实现此结果,但速度要快得多。
从根本上说,它本身就是一个VLOOKUP(同一记录的所有行),即跳过包含数据的行,这些数据经过过滤以删除空单元格。
filter(cross(cells.ID.value, "TEST-FillUp", "ID"), vV, vV.cells["Field1"].value != null)[0].cells.Field1.value