我寫了下面的函數,它的工作原理。然而,當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)'?我建議你提供一個簡單的例子來說明你的問題。 http://download.microsoft.com/zh-cn/kb/5963269/how-to-make-a-great-r-reproducible-example –
** dplyr **軟件包有一個'setdiff'方法用於您可能會調查的data.frame。 – joran
否則我會粘貼每行的值,並使用u < - do.call(paste,df1)和v < - do.call(paste,df2),然後在%v中執行u%,但我不檢查計算時間 – droopy