我正在尝试检查特定值是否在数据框中的任何位置.
我知道%in%操作员应该允许我这样做,但它似乎没有按照我期望的方式应用于整个数据框:
A = data.frame(B=c(1,2,3,4), C=c(5,6,7,8))
1 %in% A
[1] FALSE
Run Code Online (Sandbox Code Playgroud)
但是,如果我将其应用于特定列,则值将按照我期望的方式运行:
1 %in% A$C
[1] TRUE
Run Code Online (Sandbox Code Playgroud)
检查值是否在数据框中的任何位置的正确方法是什么?
989*_*989 13
你可以这样做:
any(A==1)
#[1] TRUE
Run Code Online (Sandbox Code Playgroud)
或者Reduce:
Reduce("|", A==1)
Run Code Online (Sandbox Code Playgroud)
要么
length(which(A==1))>0
Run Code Online (Sandbox Code Playgroud)
要么
is.element(1,unlist(A))
Run Code Online (Sandbox Code Playgroud)
使用循环遍历变量sapply,然后使用any。
any(sapply(A, function(x) 1 %in% x))
[1] TRUE
Run Code Online (Sandbox Code Playgroud)
或遵循digEmAll的注释,可以使用unlist,它获取一个列表(data.frame)并返回一个向量。
1 %in% unlist(A)
[1] TRUE
Run Code Online (Sandbox Code Playgroud)
要查找该值的位置,可以执行f.ex:
which(A == 1, arr.ind=TRUE)
# row col
#[1,] 1 1
Run Code Online (Sandbox Code Playgroud)