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

时间:2017-06-02 15:28:12

标签: r match

我正在尝试匹配数据框中的一行值是否匹配,但%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中是否存在行,并打印TRUEd和行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)

2 个答案:

答案 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