更轻松地搜索data.frame中的列

use*_*161 2 algorithm search r multiple-columns dataframe

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

Var1 Var2 Var3 X Y Z
VIX  SPX  VOL  2 3 4
SPX  VIX  NA   4 4 NA
SPX  NA   NA   2 NA NA
Run Code Online (Sandbox Code Playgroud)

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

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

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

我试图使用子集来过滤一列接一列,但同样麻烦.在R中是否有更简单的方法

Ron*_*hah 5

我们可以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
Run Code Online (Sandbox Code Playgroud)

或者正如使用上述注释中提到的@Cath可能导致选择一些不必要的行.我们可以把它改成

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

确保三列中存在所有三个唯一值.