我创建了以下数据框:
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>
答案 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