我只想在數據框中只提取發生在正好是的那些條目。舉個例子:R:只從數據幀中提取唯一的條目
DataFrame1 Col1 Col2 ABC 5 DEF 6 DEF 7 HIJ 8
我想只拉:
DataFrame2 ABC HIJ
凡唯一隻受Col1中確定。
任何想法?
謝謝!
我只想在數據框中只提取發生在正好是的那些條目。舉個例子:R:只從數據幀中提取唯一的條目
DataFrame1 Col1 Col2 ABC 5 DEF 6 DEF 7 HIJ 8
我想只拉:
DataFrame2 ABC HIJ
凡唯一隻受Col1中確定。
任何想法?
謝謝!
這是一個有點麻煩,但這個作品:
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')
在unique
幫助頁面都有duplicate
,可以幫助你做參考操作(雖然我沒有測試):
dup <- duplicate(DataFrame1$Col1)
DataFrame2 <- DataFrame1[!dup]
或子集
DataFrame2 <- subset(DataFrame1, subset=!dup)
感謝您的回覆。不幸的是,上面的代碼也提取了具有一個或多個觀測值的觀測值,而不是隻有一個觀測值的觀測值。再次感謝 – Mike
@Mike,看看我的答案是如何「重複」仍然可以用來實現你想做的事情。 – A5C1D2H2I1M1N2O1R2T1
您可以使用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
如何:
#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),]
'從作爲一個標籤unique' APPART SO也是R的函數嘗試'獨特(dataFrame1 [1])'。 – Usobi
@Usobi請注意,他想要的只是一次,而不是所有的行都有不同的名字。 – Llopis
@Usobi,謝謝你的迴應。 Llopis是正確的,我希望只返回那些恰好出現一個的觀察結果。有任何想法嗎?謝謝 – Mike