如何检查 r 中列长度不同的大数据框中是否存在一行



如果数据框中的一行值匹配%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并为第d行打印出TRUE,为行c打印出FALSE

为方便起见,以下是示例数据代码:

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)

我们可以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

我们可以创建一个函数,使用dplyr包中的intersect来比较数据框。

在此示例中,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

相关内容

最新更新