2013-12-12 80 views
0

我只想在數據框中只提取發生在正好是的那些條目。舉個例子:R:只從數據幀中提取唯一的條目

DataFrame1 
Col1 Col2 
ABC 5 
DEF 6 
DEF 7 
HIJ 8 

我想只拉:

DataFrame2 
ABC 
HIJ 

凡唯一隻受Col1中確定。

任何想法?

謝謝!

+0

'從作爲一個標籤unique' APPART SO也是R的函數嘗試'獨特(dataFrame1 [1])'。 – Usobi

+0

@Usobi請注意,他想要的只是一次,而不是所有的行都有不同的名字。 – Llopis

+0

@Usobi,謝謝你的迴應。 Llopis是正確的,我希望只返回那些恰好出現一個的觀察結果。有任何想法嗎?謝謝 – Mike

回答

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') 
0

unique幫助頁面都有duplicate,可以幫助你做參考操作(雖然我沒有測試):

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

或子集

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

感謝您的回覆。不幸的是,上面的代碼也提取了具有一個或多個觀測值的觀測值,而不是隻有一個觀測值的觀測值。再次感謝 – Mike

+0

@Mike,看看我的答案是如何「重複」仍然可以用來實現你想做的事情。 – A5C1D2H2I1M1N2O1R2T1

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 
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),]