亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

查找重復行的索引

查找重復行的索引

慕哥9229398 2019-08-12 17:17:34
查找重復行的索引R中復制的函數執行重復行搜索。如果我們想要刪除重復項,我們只需要編寫df[!duplicated(df),],重復項將從數據框中刪除。但是如何找到重復數據的索引呢?如果duplicated在某行上返回TRUE,則意味著這是數據幀中第二次出現這樣的行,并且可以很容易地獲得其索引。如何獲得該行首次出現的索引?或者,換句話說,重復行與之相同的索引?我可以在data.frame上做一個循環,但我認為這個問題有一個更優雅的答案。
查看完整描述

2 回答

?
忽然笑

TA貢獻1806條經驗 獲得超5個贊

這將返回邏輯索引向量:

duplicated(df) | duplicated(df[nrow(df):1, ])[nrow(df):1]

這是一個例子:

df <- data.frame(a = c(1,2,3,4,1,5,6,4,2,1))duplicated(df) | duplicated(df[nrow(df):1, ])[nrow(df):1]#[1]  TRUE  TRUE FALSE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUEwhich(duplicated(df) | duplicated(df[nrow(df):1, ])[nrow(df):1])#[1]  1  2  4  5  8  9 10

更新(基于注釋):
如果fromLast = TRUE用作函數參數,則可以減少命令的復雜性。這比創建兩個反向向量更容易。

duplicated(df) | duplicated(df, fromLast = TRUE)duplicated(df) | duplicated(df, fromLast = TRUE)#[1]  TRUE  TRUE FALSE  TRUE  TRUE FALSE FALSE  TRUE  TRUE  TRUE

這個怎么運作?

該功能duplicated以相反的行順序應用于原始數據幀和數據幀。后者的輸出再次逆轉。請注意,原始數據中第一次出現的重復值是反轉版本中的最后一次出現。此后,這兩個向量使用組合|由于TRUE它們中的至少一個表示重復的值。


查看完整回答
反對 回復 2019-08-12
?
喵喵時光機

TA貢獻1846條經驗 獲得超7個贊

如果您使用的是鍵控 data.table,則可以使用以下優雅語法

library(data.table)DT <- data.table(A = rep(1:3, each=4), 
                 B = rep(1:4, each=3), 
                 C = rep(1:2, 6), key = "A,B,C")DT[unique(DT[duplicated(DT)]),which=T]

打開包裝

  • DT[duplicated(DT)] 子集那些重復的行。

  • unique(...)僅返回重復行的唯一組合。這涉及任何重復超過1的案例(重復重復,例如重復等)

  • DT[..., which = T] 將重復的行與原始行合并,并which=T返回行號(沒有which = T它只會返回數據)。

你也可以用

 DT[,count := .N,by = list(A,B,C)][count>1, which=T]


查看完整回答
反對 回復 2019-08-12
  • 2 回答
  • 0 關注
  • 725 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號