检查值是否在数据框中

Kew*_*ewl 10 r dataframe

我正在尝试检查特定值是否在数据框中的任何位置.

我知道%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)

  • 尽管所有这些都有效,但只有第一个清楚地说明了代码的作用。 (2认同)

Sot*_*tos 8

或者干脆

sum(A == 1) > 0
#[1] TRUE
Run Code Online (Sandbox Code Playgroud)

  • 更清楚的是“any(A == 1)” (2认同)

lmo*_*lmo 5

使用循环遍历变量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)


Aks*_*elA 5

要查找该值的位置,可以执行f.ex:

which(A == 1, arr.ind=TRUE)
#     row col
#[1,]   1   1
Run Code Online (Sandbox Code Playgroud)