【发布时间】:2015-08-27 14:29:45
【问题描述】:
我想使用类似于 Excel 的 OFFSET 和 MATCH 函数的东西,这里是一个示例数据集: 数据=
Which Test?|Test1 |Test2 |Test3 |RESULT
Test1 |TRUE |80% |0 |
Test2 |FALSE |25% |0 |
Test1 |TRUE |16% |0 |
Test3 |FALSE |12% |1 |
结果栏应为:
Which Test?|Test1 |Test2 |Test3 |RESULT
Test1 |TRUE |80% |0 |TRUE
Test2 |FALSE |25% |0 |25%
Test1 |TRUE |16% |0 |TRUE
Test3 |FALSE |12% |1 |1
在最后的 RESULT 列中,我想要搜索哪个测试的测试结果?柱子。在此示例中,RESULT 列可以返回例如数字或字符串。在 Excel 公式中为:
=OFFSET($A$1, ROW()-1,MATCH(A2,$B$1:$D$1,0))
到目前为止,我已经尝试使用 sapply 列出测试并将其返回到另一个函数,例如 which(colnames... 这就是我卡住的地方。
【问题讨论】:
-
你自己尝试过什么?
-
可能是
library(data.table); setDT(data)[, Result := if(any(.SD == "TRUE")) "TRUE" else NA, .SDcols = c("Test1","Test2","Test3")]需要更多解释。 -
感谢 Veerendra,但据我了解,您的代码在测试列中搜索 TRUE,如果发现则返回 TRUE,否则不适用。我想要返回的结果实际上可能是一个数字(或字符串等)。我已经更新了上面的问题并添加了我正在尝试的搜索。
-
@Tensibai 这是我从 OP 的问题中推断出来的,但肯定需要另一个逻辑(这就是我使用“类似”这个短语的原因); OP 对所需逻辑的一些澄清会很好
-
@Jaap 查看我的答案,了解我理解的逻辑:p