2017-04-05 78 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

相關問題