我尝试了一种删除重复项的方法,我很想知道它为什么不起作用。
采用此数据框:
o<-c(123,123,123,124,125,126)
c<-c(1,2,3,4,5,6)
d<-c(8,8,NA,8,8,8)
df<-data.frame(o,c,d)
un<-unique(df$o)
df<-df[un,]
df
现在df都是NA的。谁能告诉我为什么????
我的真实数据集中的 旁注 (私人信息,因此示例df):同样的代码DID不会为所有值生成NA。我发现了一个问题,如下所示:length(df$var)=100, length(unique(df$var))=90
。精细。然后我会运行上面的代码(重写df),我会看到:length(df$var)=90, length(unique(df$var))=80
。如果我继续循环,我最终会得到所有NA的一行。
我尝试复制此错误,但尝试删除重复项的代码只生成了所有NA,与我的真实数据集不同。无论如何,我希望在代码中发现问题会回答我的问题。
提前感谢您的帮助。
答案 0 :(得分:0)
我想你想要这样的东西:
un_logical <- !duplicated(df$o)
df<-df[un_logical,]
您是否在创建后检查了un
是什么?根据{{3}},unique
会将唯一元素,而非索引返回到唯一元素。在您的示例un == c(123,124,125,126)
中,df
行的范围非常大。
如果您在真实数据集中搜索的列在此一般范围内是类似的整数,那么您的真实数据集可能足够长,以至于unique
找到的唯一元素是真实的索引。
答案 1 :(得分:0)
这是您的原始数据框
> df<-data.frame(o,c,d)
> df
o c d
1 123 1 8
2 123 2 8
3 123 3 NA
4 124 4 8
5 125 5 8
6 126 6 8
删除“o”列中的副本
>df[!duplicated(df[,c("o")]),]
o c d
1 123 1 8
4 124 4 8
5 125 5 8
6 126 6 8
删除“d”列中的副本
>df[!duplicated(df[,c("d")]),]
o c d
1 123 1 8
3 123 3 NA