r - 在 data.frame 中跨列搜索的更简单的解决方案

标签 r algorithm search dataframe multiple-columns

我有一个像下面这样的数据库

Var1 Var2 Var3 X Y Z
VIX  SPX  VOL  2 3 4
SPX  VIX  NA   4 4 NA
SPX  NA   NA   2 NA NA

我想将第一行与来自用户的输入隔离为 VIX、SPX 和 VOL。但是,在这样的数据库中,我不知道这些变量保存在哪种组合中。

也就是说,我们可能将 VIX 作为 Var1,将 SPX 作为 Var2,将 VOL 作为 Var3,或者我们将 VOL 作为 Var1,将 SPX 作为 Var2,将 VIX 作为 Var3。在这种情况下,可能有 6 种组合。

我可以连接字符串以在 R 中创建所有 6 种可能性并进行行查找。但我正在寻找更简单的算法。

我正在尝试使用 subset in 来过滤一列又一列,但这同样很麻烦。在 R 中有没有更简单的方法

最佳答案

我们可以对前三列逐行使用 apply 并使用 grepl 检查它是否具有三个可能值中的任何一个,最后使用 all 我们验证该行的所有三列都具有可接受的值。

df[apply(df[1:3], 1, function(x) all(grepl("VIX|SPX|VOL", x))), ]

#   Var1 Var2 Var3 X Y Z
#1  VIX  SPX  VOL  2 3 4

或者正如 @Cath 在评论中提到的那样,使用上述内容可能会导致选择一些不必要的行。我们可以把它改成

df[apply(df[1:3], 1, function(x) all(c("VIX", "SPX", "VOL") %in% x)), ]

确保所有三个唯一值都出现在三列中。

关于r - 在 data.frame 中跨列搜索的更简单的解决方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40255455/

相关文章:

java - 无法加载 rJava,因为无法加载共享库

.net - 最小化网络图中的交叉线

java - 在数组中搜索标记并找到它们

JavaScript Mini-Max Sum - 来自 HackerRank 网站的挑战

algorithm - 如何制定elo表

java - 使用 Java 和 Scribe 的 Vimeo 搜索 API

search - 在 Web 项目中使用 SOLR 的最佳方法是什么?

r - expand.grid 的非冗余版本

r - Dplyr 和 Tidyverse => 有条件替换所有变量(循环遍历数据集)

r - 在 Shiny 中永久保存一个对象在内存中