在R数据帧中搜索表达式中具有多个属性

时间:2018-02-13 19:16:36

标签: r subset

我创建了以下数据框:

df <- data.frame(var1=c(1,2,3,4,5,6), 
                 var2=c("f","e","d","c","b","a"), 
                 var3=c("b",1,3,"f","d","5"))

row.names(df) <- c("val1", "val2", "val3", "val4", "val5", "val6")

     var1 var2 var3
val1    1    f    b
val2    2    e    1
val3    3    d    3
val4    4    c    f
val5    5    b    d
val6    6    a    5

我也创造了一个矢量:

variables <- c("var1", "var2", "var3")

当我输入df[,variables]时,R会打印与variables中定义的属性关联的列。

我的目的是在数据框中过滤,如:

df[variables==3, ]

并期望在提示符中看到任何这些属性中等于3的所有行。例如,使用上面定义的数据框:

df[variables=="d", ]

      var1 var2 var3
 val3    3    d    3
 val5    5    b    d

¿我怎么能实现这个目标?

注意:我知道将variables元素定义为字符串R会将它们作为字符串进行比较并且不会运行。我也尝试了以下内容:

df[df[,variables]==3, variables]

但是R只返回一行和陌生的东西,如:

     var1 var2 var3
val3    3    d    3
NA     NA <NA> <NA>

1 个答案:

答案 0 :(得分:1)

您可以使用

df[rowSums(df == 5) >= 1, ]

在第一部分df == 5中查找等于5的值,并返回与df具有相同尺寸的矩阵。

df == 5
#      var1  var2  var3
#[1,] FALSE FALSE FALSE
#[2,] FALSE FALSE FALSE
#[3,] FALSE FALSE FALSE
#[4,] FALSE FALSE FALSE
#[5,]  TRUE FALSE FALSE
#[6,] FALSE FALSE  TRUE

当你致电rowSums(df == 5)时,你会得到一个数字向量。

rowSums(df == 5)
#[1] 0 0 0 0 1 1

现在,您可以检查这些值中的任何值是否大于或等于1 rowSums(df == 5) >= 1,并使用结果过滤所需的行。

df[rowSums(df == 5) >= 1, ]
#  var1 var2 var3
#5    5    b    d
#6    6    a    5