我正在尝试检查特定值是否在数据框中的任何位置。
我知道%in%
运算符应该允许我这样做,但它似乎没有按照我应用于整个数据框的方式工作:
A = data.frame(B=c(1,2,3,4), C=c(5,6,7,8))
1 %in% A
[1] FALSE
但是,如果我将其应用于特定列,则值将按照我期望的方式运行:
1 %in% A$C
[1] TRUE
检查某个值是否在数据框中的任何位置的正确方法是什么?
答案 0 :(得分:10)
你可以这样做:
any(A==1)
#[1] TRUE
或Reduce
:
Reduce("|", A==1)
OR
length(which(A==1))>0
OR
is.element(1,unlist(A))
答案 1 :(得分:8)
或者只是
sum(A == 1) > 0
#[1] TRUE
答案 2 :(得分:5)
使用sapply
循环变量,然后使用any
。
any(sapply(A, function(x) 1 %in% x))
[1] TRUE
或者在digEmAll的评论之后,您可以使用unlist
,它会获取一个列表(data.frame)并返回一个向量。
1 %in% unlist(A)
[1] TRUE
答案 3 :(得分:4)
要查找该值的位置,您可以执行f.ex:
which(A == 1, arr.ind=TRUE)
# row col
#[1,] 1 1
答案 4 :(得分:3)
理解为什么你的第一次尝试不起作用的技巧,实际上归结为理解数据框是什么 - 即一个相等长度的向量列表。你在这里尝试做的不是检查矢量列表是否符合你的条件,而是检查这些矢量中的值是否与条件匹配。
答案 5 :(得分:0)
尝试:
any(A == 1)
返回FALSE或TRUE