2017-04-05 56 views
4

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

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

什么是检查是否值是在数据帧的任何位置的正确方法?

+4

'1%作为%。矩阵(A)'?如果A的所有列都是数字,那当然是有意义的...... – digEmAll

+0

@digEmAll,'“1”%in%as.character(as.matrix(A))'可以在所有情况下工作,但是我不'不知道那是多好。 –

回答

6

你可以这样做:

any(A==1) 
#[1] TRUE 

或与Reduce

Reduce("|", A==1) 

OR

length(which(A==1))>0 

OR

is.element(1,unlist(A)) 
+0

尽管所有这些工作,只有第一个清楚地说明了代码的作用。 – dash2

4

使用sapply循环变量,然后使用any

any(sapply(A, function(x) 1 %in% x)) 
[1] TRUE 

或以下digEmAll的评论,你可以使用unlist,它接受一个列表(data.frame),并返回一个载体。

1 %in% unlist(A) 
[1] TRUE 
7

或者干脆

sum(A == 1) > 0 
#[1] TRUE 
+1

更清晰的将是'任何(A == 1)' – dash2

+1

@ dash2这已经发布在下面....两次 – Sotos

2

诀窍理解为什么你的第一次尝试是不行的,其实就是要了解一个数据帧是什么 - 即长度相等的向量的列表。你在这里试图做的不是检查向量列表是否与你的条件匹配,而是检查这些向量中的值是否与条件匹配。

3

要查找该值,你可以做f.ex位置:

which(A == 1, arr.ind=TRUE) 
#  row col 
#[1,] 1 1 
0

尝试:

any(A == 1)

返回FALSE或TRUE

相关问题