R的duplicated
返回一個向量,顯示向量或數據框的每個元素是否具有較小下標的元素的副本。所以,如果行3,4,和一個5行的數據幀的5相同,duplicated
會給我矢量查找所有重複行,包括「具有較小下標的元素」
FALSE, FALSE, FALSE, TRUE, TRUE
但在這種情況下,其實我是想獲得
FALSE, FALSE, TRUE, TRUE, TRUE
那是,我想知道一行是否與一個較大的下標也重複。
R的duplicated
返回一個向量,顯示向量或數據框的每個元素是否具有較小下標的元素的副本。所以,如果行3,4,和一個5行的數據幀的5相同,duplicated
會給我矢量查找所有重複行,包括「具有較小下標的元素」
FALSE, FALSE, FALSE, TRUE, TRUE
但在這種情況下,其實我是想獲得
FALSE, FALSE, TRUE, TRUE, TRUE
那是,我想知道一行是否與一個較大的下標也重複。
duplicated
有一個fromLast
參數。 ?duplicated
的「示例」部分向您展示瞭如何使用它。只需撥打duplicated
兩次,一次使用fromLast=FALSE
,一次使用fromLast=TRUE
,並取TRUE
的行數。
一些後期編輯: 您沒有提供一個可重複的例子,所以這裏的親切貢獻的@jbaums
vec <- c("a", "b", "c","c","c")
vec[duplicated(vec) | duplicated(vec, fromLast=TRUE)]
## [1] "c" "c" "c"
您需要組裝duplicated
值的集合,應用unique
,然後使用%in%
進行測試。像往常一樣,一個樣本問題會使這個過程變得活躍起來。
> vec <- c("a", "b", "c","c","c")
> vec[ duplicated(vec)]
[1] "c" "c"
> unique(vec[ duplicated(vec)])
[1] "c"
> vec %in% unique(vec[ duplicated(vec)])
[1] FALSE FALSE TRUE TRUE TRUE
我已經有same question一個例子,如果我不是錯了,這也是一個答案。
vec[col %in% vec[duplicated(vec$col),]$col]
說不上來哪一個是快,不過,我目前使用的數據集不夠大,使該生產顯著時間間隔測試。
但是,這種解決方案是否假設只有2個重複值?如果有2個以上呢?中間的將被忽略。我知道「重複」一詞的字面含義意味着「雙重」,但更強大的解決方案將是@ 42,是的? – JoeM05
堅持下去,我剛剛進行了測試,發現我錯了: 'x < - c(1:9,7:10,5:22); y < - c(字母,字母[1:5]); test < - data.frame(x,y); 測試[重複(測試$ x)|重複(test $ x,fromLast = TRUE),]' 返回他的7,8和9的所有三個副本。爲什麼這會起作用? – JoeM05
因爲無論你從頭到尾,還是從前面開始,都會捕獲中間的。例如,'duplicateated(c(1,1,1))'''duplicateated(c(1,1,1,),fromLast = TRUE)'給出'c(FALSE,TRUE,TRUE)'和'c TRUE,TRUE,FALSE)'。在這兩種情況下,中間值都是「真」。以兩個向量的'|'給出'c(TRUE,TRUE,TRUE)'。 – Brandon