我正在尝试检查特定值是否在数据帧中的任何位置。检查值是否在数据帧中
我知道%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
什么是检查是否值是在数据帧的任何位置的正确方法?
我正在尝试检查特定值是否在数据帧中的任何位置。检查值是否在数据帧中
我知道%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
什么是检查是否值是在数据帧的任何位置的正确方法?
你可以这样做:
any(A==1)
#[1] TRUE
或与Reduce
:
Reduce("|", A==1)
OR
length(which(A==1))>0
OR
is.element(1,unlist(A))
尽管所有这些工作,只有第一个清楚地说明了代码的作用。 – dash2
使用sapply
循环变量,然后使用any
。
any(sapply(A, function(x) 1 %in% x))
[1] TRUE
或以下digEmAll的评论,你可以使用unlist
,它接受一个列表(data.frame),并返回一个载体。
1 %in% unlist(A)
[1] TRUE
诀窍理解为什么你的第一次尝试是不行的,其实就是要了解一个数据帧是什么 - 即长度相等的向量的列表。你在这里试图做的不是检查向量列表是否与你的条件匹配,而是检查这些向量中的值是否与条件匹配。
要查找该值,你可以做f.ex位置:
which(A == 1, arr.ind=TRUE)
# row col
#[1,] 1 1
尝试:
any(A == 1)
返回FALSE或TRUE
'1%作为%。矩阵(A)'?如果A的所有列都是数字,那当然是有意义的...... – digEmAll
@digEmAll,'“1”%in%as.character(as.matrix(A))'可以在所有情况下工作,但是我不'不知道那是多好。 –