R:仅提取数据帧中唯一的条目

时间:2013-12-12 12:57:27

标签: r unique

我希望只在数据框中提取一次完全的条目。举个例子:

DataFrame1  
Col1 Col2   
ABC   5  
DEF   6  
DEF   7  
HIJ   8

我只想拉:

DataFrame2  
ABC  
HIJ

唯一性仅由Col1确定。

有什么想法吗?

谢谢!

4 个答案:

答案 0 :(得分:1)

这有点麻烦,但这很有效:

x <- table(DataFrame1[, 1]) == 1
DataFrame2 <- na.omit(data.frame(ifelse(x, names(x),NA)))

或者更优雅地使用sql:

library(sqldf)

DataFrame2 <- sqldf('select Col1 from DataFrame1 group by Col1 having count(Col1) = 1')

答案 1 :(得分:1)

您可以使用ave创建col1中值的计数向量和基于该值的子集:

mydf[with(mydf, ave(Col1, Col1, FUN = length)) == "1", ]
#   Col1 Col2
# 1  ABC    5
# 4  HIJ    8

或者,类似地,使用“data.table”:

library(data.table)
DT <- data.table(mydf)
DT[, id := .N, by = Col1][id == 1]
#    Col1 Col2 id
# 1:  ABC    5  1
# 2:  HIJ    8  1

如果你从每个方向运行两次,那么复制也有效:

mydf[!(duplicated(mydf$Col1) | duplicated(mydf$Col1, fromLast=TRUE)), ]
#   Col1 Col2
# 1  ABC    5
# 4  HIJ    8

答案 2 :(得分:0)

unique帮助页面中,有duplicate的引用可以帮助您(虽然我没有测试过):

dup <- duplicate(DataFrame1$Col1)
DataFrame2 <- DataFrame1[!dup]

或子集

DataFrame2 <- subset(DataFrame1, subset=!dup)

答案 3 :(得分:0)

怎么样:

#If you want just the unique 
DataFrame1[which(table(DataFrame1[,"Col1"])==1),"Col1"]values.

#If you want the whole corresponding row.
DataFrame1[which(table(DataFrame1[,"Col1"])==1),]