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

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

從dataframe中移除成對重復

從dataframe中移除成對重復

慕無忌1623718 2019-07-16 10:18:04
從dataframe中移除成對重復這似乎是一個簡單的問題,但我似乎無法解決。如果兩個列具有相同的值,則我希望從dataframe(Df)中刪除重復項,即使這些值位于逆序..我的意思是,假設您有以下數據框架:a <- c(rep("A", 3), rep("B", 3), rep("C",2))b <- c('A','B','B','C','A','A','B','B')df <-data.frame(a,b)  a b1 A A2 A B3 A B4 B C5 B A6 B A7 C B8 C B如果現在刪除重復項,則會得到以下數據框架:df[duplicated(df),]  a b3 A B6 B A8 C B但是,我也想刪除這個數據框架中的第6行,因為“A”、“B”與“B”、“A”相同。我怎么能自動做到這一點?理想情況下,我可以指定要比較的兩個列,因為數據幀可能有不同的列,而且可能相當大。謝謝!
查看完整描述

3 回答

?
慕標琳琳

TA貢獻1830條經驗 獲得超9個贊


的一種解決方案是首先對每一行進行排序。df:


for (i in 1:nrow(df))

{

    df[i, ] = sort(df[i, ])

}

df


a b

1 A A

2 A B

3 A B

4 B C

5 A B

6 A B

7 B C

8 B C

在這一點上,只需要刪除重復的元素:


df = df[!duplicated(df),]

df

  a b 

1 A A

2 A B

4 B C

正如注釋中提到的這封電子郵件一樣,您的代碼實際上是守住復制件。你需要用!duplicated移除它們。


查看完整回答
反對 回復 2019-07-16
?
POPMUISE

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

指定列以檢查是否還有其他列:


a <- c(rep("A", 3), rep("B", 3), rep("C",2))

b <- c('A','B','B','C','A','A','B','B')

df <-data.frame(a,b)


df$c = sample(1:10,8)

df$d = sample(LETTERS,8)

df

? a b? c d

1 A A 10 B

2 A B? 8 S

3 A B? 7 J

4 B C? 3 Q

5 B A? 2 I

6 B A? 6 U

7 C B? 4 L

8 C B? 5 V


cols = c(1,2)

newdf = df[,cols]

for (i in 1:nrow(df)){

? ? newdf[i, ] = sort(df[i,cols])

}


df[!duplicated(newdf),]

? a b c d

1 A A 8 X

2 A B 7 L

4 B C 2 P


查看完整回答
反對 回復 2019-07-16
  • 3 回答
  • 0 關注
  • 887 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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