仅返回 Spotfire 中两个字符串的唯一值

Returning only the unique values from two strings in Spotfire

提问人:P.Harper 提问时间:3/9/2023 最后编辑:Adrian MaxwellP.Harper 更新时间:3/9/2023 访问量:204

问:

我正在尝试比较两列 a + b.A 列填充了一串数据,B 列填充了另一串数据。我在自定义列中使用以下公式来返回唯一值,但它似乎不适用于实例。用于标识唯一值的公式:

right(RXReplace([expected dates],[dates],"","g"),Len(RXReplace([expected dates],[dates],"","g")))

[sample of the data being compared

当“日期”列中存在“预期日期”列中的所有日期时,此公式有时会返回这些日期。

我试过这个公式

 right(RXReplace([expected dates],[dates],"","g"),Len(RXReplace([expected dates],[dates],"","g"))). 

我期望返回日期列中缺少的日期 [sample of what was expected to be returned

字符串 日期 比较 缺失数据 点火

评论

0赞 Adrian Maxwell 3/9/2023
您的数据图像与以下内容一样有用: sql 的图像 请不要使用数据的图像。如果我写了一个非常漂亮但很长的解决方案查询,截取了它的屏幕截图,并添加了该图像作为答案,您会对不必要的转录工作感到恼火吗?请不要使用数据图像,只需将一些数据复制/粘贴到问题中并使用工具栏中的按钮进行格式化即可。ps:可以使用 ozh.github.io/ascii-tables 创建 ascii 表。{}
0赞 Adrian Maxwell 3/9/2023
不清楚(即使我考虑图像)你“期望”什么。在比较 A 和 B 时,您是否希望日期文本之间的最大匹配数?看起来 B 是常数,这是真的吗?

答:

0赞 Gaia Paolini 3/9/2023 #1

我不确定你能否用一个简单的表达式得到这个结果,因为你正在有效地比较两个数组。我建议使用 TERR 表达式函数创建一个计算列,如果您可以使用的话。

我也不确定你期望得到什么回报。您只想要 [预期日期] 中不在 [日期] 中的元素,还是想要所有差异,即包括 [日期] 中不在 [预期日期] (额外日期)中的日期?

我建议的代码是:

checkDifference = function(A,B) {
    Av=strsplit(A,',')[[1]]
    Bv=strsplit(B,',')[[1]]
    Cv=c(setdiff(Bv,Av),setdiff(Av,Bv))
    C=paste(Cv,collapse=',')
    return (C)
}

output=mapply(FUN=checkDifference,input1,input2)

该函数首先将两列拆分为向量,应用集合差值,将生成的向量联接回字符串并返回它。TERR 表达式函数假定输入和输出是整列数据,这就是我使用 mapply 函数逐行应用公式的原因。

在这种情况下,我正在寻找所有差异,如果您只想要 [预期日期] 中不在 [日期] 中的元素,则可以替换此行,它将两个差异连接起来:

Cv=c(setdiff(Bv,Av),setdiff(Av,Bv)

有了这个,即只有 Bv 而不是 Av 中的一组项目:

Cv=setdiff(Bv,Av)

要将此代码放入 Spotfire,请从顶部菜单中选择“数据”>“数据函数属性”>“表达式函数”选项卡>“新建”。

然后在编辑器中复制并粘贴代码,为其命名,例如 TERR_checkDates、函数类型=列函数、返回类型=字符串、类别=文本函数。

现在,此函数将在创建新的计算列时可以使用的函数列表中可用。您应该在可用函数列表中找到它。

使用以下表达式创建新列:

TERR_checkDates([dates],[expected dates])