Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何检查r中不同列长的大数据框中是否存在一行_R_Match - Fatal编程技术网

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

如何检查r中不同列长的大数据框中是否存在一行,r,match,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中是否存在一行,并打印d行为TRUE,c行为FALSE 为方便起见,以下是示例数据代码: a<-1;b<-2;c<-data.frame(a,b);a<-1;b<-1;d<-data.frame

我试图匹配数据帧中的一行值是否匹配,但%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)
我们可以粘贴行,然后在%中执行%

我们可以粘贴行,然后在%中执行%


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

在本例中,dt2是比dt1具有更多列的数据帧


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

在本例中,dt2是比dt1具有更多列的数据帧


谢谢你的回答,它非常有效,你能解释一下方法吗?我认为不同列长度的数据是不可比较的。@Y.Z.根据您的帖子,比较是在一行数据集和多行数据集之间进行的,即“g”。在do.callpaste中,将每行的元素粘贴在一起,创建一个字符串do.callpaste,c[1]1 2,并与“g”中的类似字符串进行比较,即do.callpaste,g[namesc][1]1 2 3。现在,我们比较的是两个向量,而不是data.frame。由于在%in%`%的lhs上有一个元素,它根据该元素在另一个中是否存在返回FALSE/TRUEvector@Y.Z.假设“g”包含来自“c”和“c”的列,我们用g[namesd]或g[namesc]@Y.Z来子集“g”数据集。namesc或namesd是“c”和“d”的列名。因此,如果我们假设这些列存在于“g”中,那么我们将只使用这些列对“g”数据集进行子集设置。我想你明白我的意思了,现在一切都有意义了。再次感谢您的回答和随后的解释!谢谢你的回答,它非常有效,你能解释一下方法吗?我认为不同列长度的数据是不可比较的。@Y.Z.根据您的帖子,比较是在一行数据集和多行数据集之间进行的,即“g”。在do.callpaste中,将每行的元素粘贴在一起,创建一个字符串do.callpaste,c[1]1 2,并与“g”中的类似字符串进行比较,即do.callpaste,g[namesc][1]1 2 3。现在,我们比较的是两个向量,而不是data.frame。由于在%in%`%的lhs上有一个元素,它根据该元素在另一个中是否存在返回FALSE/TRUEvector@Y.Z.假设“g”包含来自“c”和“c”的列,我们用g[namesd]或g[namesc]@Y.Z来子集“g”数据集。namesc或namesd是“c”和“d”的列名。因此,如果我们假设这些列存在于“g”中,那么我们将只使用这些列对“g”数据集进行子集设置。我想你明白我的意思了,现在一切都有意义了。再次感谢您的回答和随后的解释!
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
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