删除不重复的重复技术(R)

时间:2017-10-13 01:58:53

标签: r duplicates na data-manipulation

我尝试了一种删除重复项的方法,我很想知道它为什么不起作用。

采用此数据框:

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,与我的真实数据集不同。无论如何,我希望在代码中发现问题会回答我的问题。

提前感谢您的帮助。

2 个答案:

答案 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