将每一列的内容与所有其他列的内容进行比较,并呈现匹配计数矩阵
Compare each column's contents with all other columns' contents and present matrix of match counts
鉴于此 table:
我想导出这个 table:
...有点像地图册中的里程表。
我正在尝试对每列中的单词与所有其他列中的单词进行交叉table 比较,以显示它们之间有多少匹配项。
例如,将第 1 列与第 2 列进行比较可能会产生 4 个匹配项。黄色粗体轮廓的单元格是匹配项。
我是这样计算的:
我认为可能有一种 'easy' 方法可以使用 Power Query 完成此操作。有吗?
(哦...顺便说一句...我正在寻找的解决方案不应该期望输入列的数量是静态的:即,它应该容纳更多或更少的列用于输入比较集。)
谢谢。
不,没有简单的方法,但可以做到。
但是,我得到不同的结果。我对你的逻辑的解释是:对于每个列组合,1列中每个常用词的出现次数必须乘以另一列中的出现次数。
这些是我的结果:
这是我的查询代码:
let
Source = Table1,
ColumnNames = Table.ColumnNames(Source),
Tabled = Table.FromColumns({ColumnNames}, type table[Columns = text]),
AddedColumns2 = Table.AddColumn(Tabled, "Columns2", each ColumnNames, type {text}),
ExpandedColumns2 = Table.ExpandListColumn(AddedColumns2, "Columns2"),
CommonWords =
Table.AddColumn(ExpandedColumns2,
"DistinctIntersect",
each if [Columns] = [Columns2]
then {}
else List.Distinct(List.Intersect({Table.Column(Source,[Columns]),
Table.Column(Source,[Columns2])}))),
AddedCount =
Table.AddColumn(CommonWords,
"Count",
(This) => List.Sum({0}&List.Transform(This[DistinctIntersect],
each List.Count(List.PositionOf(Table.Column(Source,This[Columns]),_,2)) *
List.Count(List.PositionOf(Table.Column(Source,This[Columns2]),_,2)))),
Int64.Type),
RemovedColumns = Table.RemoveColumns(AddedCount,{"DistinctIntersect"}),
PivotedColumn = Table.Pivot(RemovedColumns, List.Distinct(RemovedColumns[Columns2]), "Columns2", "Count")
in
PivotedColumn
鉴于此 table:
我想导出这个 table:
...有点像地图册中的里程表。
我正在尝试对每列中的单词与所有其他列中的单词进行交叉table 比较,以显示它们之间有多少匹配项。
例如,将第 1 列与第 2 列进行比较可能会产生 4 个匹配项。黄色粗体轮廓的单元格是匹配项。
我是这样计算的:
我认为可能有一种 'easy' 方法可以使用 Power Query 完成此操作。有吗?
(哦...顺便说一句...我正在寻找的解决方案不应该期望输入列的数量是静态的:即,它应该容纳更多或更少的列用于输入比较集。)
谢谢。
不,没有简单的方法,但可以做到。 但是,我得到不同的结果。我对你的逻辑的解释是:对于每个列组合,1列中每个常用词的出现次数必须乘以另一列中的出现次数。 这些是我的结果:
这是我的查询代码:
let
Source = Table1,
ColumnNames = Table.ColumnNames(Source),
Tabled = Table.FromColumns({ColumnNames}, type table[Columns = text]),
AddedColumns2 = Table.AddColumn(Tabled, "Columns2", each ColumnNames, type {text}),
ExpandedColumns2 = Table.ExpandListColumn(AddedColumns2, "Columns2"),
CommonWords =
Table.AddColumn(ExpandedColumns2,
"DistinctIntersect",
each if [Columns] = [Columns2]
then {}
else List.Distinct(List.Intersect({Table.Column(Source,[Columns]),
Table.Column(Source,[Columns2])}))),
AddedCount =
Table.AddColumn(CommonWords,
"Count",
(This) => List.Sum({0}&List.Transform(This[DistinctIntersect],
each List.Count(List.PositionOf(Table.Column(Source,This[Columns]),_,2)) *
List.Count(List.PositionOf(Table.Column(Source,This[Columns2]),_,2)))),
Int64.Type),
RemovedColumns = Table.RemoveColumns(AddedCount,{"DistinctIntersect"}),
PivotedColumn = Table.Pivot(RemovedColumns, List.Distinct(RemovedColumns[Columns2]), "Columns2", "Count")
in
PivotedColumn