【发布时间】:2014-03-26 21:21:17
【问题描述】:
我写了以下函数,它可以工作。但是,当df1 有 1700 行,df2 有 70000 行时,速度非常慢。有没有办法提高效率?
rowcheck <- function(df1, df2){
apply(df1, 1, function(x) any(apply(df2, 1, function(y) all(y==x))))
}
我写这个函数的一个例子是:我想检查 df1 中的每一行是否包含在 df2 中:
df1=data.frame(a=c(1:3),b=c("a","b","c"))
df2=data.frame(a=c(1:6),b=rep(c("a","b","c"),2))
对于 df1 的每一行,我想检查它是否作为一行包含在 df2 中。我想将函数返回为长度为 nrow(df1) 的逻辑向量。
感谢您的帮助。
【问题讨论】:
-
也许你可以试试
all(y %in% x)?我建议您提供一个简单的示例来说明您的问题。 stackoverflow.com/questions/5963269/… -
dplyr 包有一个
setdiff方法用于 data.frame,您可能会对其进行调查。 -
否则我会用 u
-
@droopy u%in%v 适用于一维 u 和每个元素也是一维的向量 v。但是,当 u 是向量时,比如 u=(x1,x2),并且 v 是 m x 2 维的矩阵或数据框,%in% 不能正常工作。我是否缺少 %in% 的内容?
-
是的,因为我的解决方案正是 Richard 复制并粘贴到函数中的解决方案