我正在尝试匹配数据框中的一行值是否匹配,但%in%
函数似乎无法正常工作。
以下是一个例子:
> c
a b
1 1 2
> d
a b
1 1 1
> g
a b f
1 1 1 1
2 2 2 2
3 3 3 3
无论如何,我可以检查大数据框g
中是否存在行,并打印TRUE
行d
和行FALSE
c
}?
为方便起见,以下是示例数据代码:
a<-1;b<-2;c<-data.frame(a,b);a<-1;b<-1;d<-data.frame(a,b);a<-c(1,2,3);b<-c(1,2,3);f<-c(1,2,3);g<-data.frame(a,b,f)
答案 0 :(得分:2)
我们可以paste
行,然后执行%in%
do.call(paste, c) %in% do.call(paste, g[names(c)])
#[1] FALSE
do.call(paste, d) %in% do.call(paste, g[names(d)])
#[1] TRUE
答案 1 :(得分:2)
我们可以使用intersect
包中的dplyr
创建一个函数来比较数据框。
在此示例中,dt2
是列数多于dt1
的数据框。
is.match <- function(dt1, dt2){
temp <- dplyr::intersect(dt1, dt2[, names(dt1)])
if (nrow(temp) == 0){
return(FALSE)
} else {
return(TRUE)
}
}
is.match(c, g)
# [1] FALSE
is.match(d, g)
# [1] TRUE