我想检查data.frame()中的行是否与现有行重复。正如已经指出here一种方法可能是使用复制函数。但是,如果我使用该功能,我会收到以下错误:
Error: argument 'incomparables != FALSE' is not used (yet)
在一封很旧的邮件中,有人指出这实际上是R中的一个错误(here上的更多信息)。我的data.frame()看起来像这样:
data.frame(val1=int,val2=int,val3=int,val4=float);
我想知道问题究竟是什么,因为我的data.frame中似乎没有“NA”值,因为
?duplicate
指出。这可能是一个非常愚蠢的问题,但我对R很新,并且很乐意提出有关此问题的任何提示!
提前致谢, 迈克尔
P.S。:我提供了一个建议的例子
table <- NULL;
foo <- function(n, d, nh, v){
newEntry <- data.frame(node_i=n, node_j=nh, dst=d, phi=v);
if(length(table != 0)){
if(!duplicated(table, newEntry)){
add(n, nh, d, v);
}else{
print("it is a duplicate!")
}
}else{
add(n, nh, d, v);
}
}
add <- function(n, d, nh, v){
rbind(table, data.frame(node_i=n, node_j=nh, dst=d, phi=v)) ->> table;
}
bar <- function(){
foo(23,42,5,4.0);
print(table);
foo(22,42,5,4.0);
print(table);
foo(23,42,5,4.0);
print(table);
}
然而,这似乎与duplicate()完全没有问题。如果我尝试添加另一行叹息,我会得到同样的错误。
答案 0 :(得分:0)
如果您使用duplicated
中的match_df
替换plyr
功能,则应解决此问题。
library(plyr) # for match_df
table <- NULL;
foo <- function(n, d, nh, v){
newEntry <- data.frame(node_i=n, node_j=nh, dst=d, phi=v);
if(length(table != 0)){
if(nrow(plyr::match_df(table, newEntry))){
add(n, nh, d, v);
}else{
print("it is a duplicate!")
}
}else{
add(n, nh, d, v);
}
}
add <- function(n, d, nh, v){
rbind(table, data.frame(node_i=n, node_j=nh, dst=d, phi=v)) ->> table;
}
bar <- function(){
foo(23,42,5,4.0);
print(table);
foo(22,42,5,4.0);
print(table);
foo(23,42,5,4.0);
print(table);
}
> bar()
node_i node_j dst phi
1 23 42 5 4
Matching on: node_i, node_j, dst, phi
[1] "it is a duplicate!"
node_i node_j dst phi
1 23 42 5 4
Matching on: node_i, node_j, dst, phi
[1] "it is a duplicate!"
node_i node_j dst phi
1 23 42 5 4
> table
node_i node_j dst phi
1 23 42 5 4