提问人:P.Harper 提问时间:3/9/2023 最后编辑:Adrian MaxwellP.Harper 更新时间:3/9/2023 访问量:204
仅返回 Spotfire 中两个字符串的唯一值
Returning only the unique values from two strings in Spotfire
问:
我正在尝试比较两列 a + b.A 列填充了一串数据,B 列填充了另一串数据。我在自定义列中使用以下公式来返回唯一值,但它似乎不适用于实例。用于标识唯一值的公式:
right(RXReplace([expected dates],[dates],"","g"),Len(RXReplace([expected dates],[dates],"","g")))
[
当“日期”列中存在“预期日期”列中的所有日期时,此公式有时会返回这些日期。
我试过这个公式
right(RXReplace([expected dates],[dates],"","g"),Len(RXReplace([expected dates],[dates],"","g"))).
我期望返回日期列中缺少的日期 [
答:
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])
评论
{}