2016-02-17 101 views
0

我正在尋找一個簡單的解決方案,而不是做幾個步驟。R - 如何在一列中找到重複的行並在該重複值中添加額外的文本?

我有36個變量的數據幀與幾乎3000行,VARS之一是字符類型與名稱。它們必須是唯一的。我需要找到具有相同名稱的行,並在文本中添加「重複」。我無法刪除重複數據,因爲它來自關係數據庫,我需要該行ID用於其他操作。 我可以找到重複的行並手動重命名文本。但這意味着在查找重複的記錄行ID和他們手動替換文本名稱。

有沒有辦法自動將多餘的文字添加到重複的名字?我仍然對R很陌生,並且很難做出基於自動條件的功能。

這將是這樣的: 從這:

ID name age sex 
1 John 18 M 
2 Mary 25 F 
3 Mary 19 F 
4 Ben  21 M 
5 July 35 F 

要這樣:

ID name    age sex 
1 John    18 M 
2 Mary    25 F 
3 Mary - duplicated 19 F 
4 Ben     21 M 
5 July    35 F 

難道你們提供一些線索?

非常感謝。

+3

我會建議一種不同的方法,使用額外的列來標記重複項:'df $ duplicated < - duplicated(df $ name)'。除了非常簡單和快速以外,它具有易於子集化的優點,例如'subset(df,!duplicated)'。 –

+0

我曾經想過類似的東西,但後來我需要將數據導入到數據庫中,並且無法添加列。我綁定到他們發送給我的數據庫。感謝您的建議,我一定會在其他作品中使用。 – aoceano

回答

1

編輯:增加一個列中的註釋可能是最好的事情,但如果你真的想這樣做你所建議...

duplicated功能識別重複。然後,您只需使用粘貼來應用附加。

df <- data.frame(
    ID = 1:5, 
    name = c('John', 'Mary', 'Mary', 'Ben', 'July'), 
    age = c(18, 25, 19, 21, 35), 
    sex = c('M', 'F', 'F', 'M', 'F'), 
    stringsAsFactors = FALSE) 


# Add "-duplicated" to every duplicated value (following Laterow's comment) 
dup <- duplicated(df$name) 
df$name[dup] <- paste0(df$name[dup], '-duplicated') 

df 
    ID   name age sex 
1 1   John 18 M 
2 2   Mary 25 F 
3 3 Mary-duplicated 19 F 
4 4    Ben 21 M 
5 5   July 35 F 
+1

您可以通過說'dup < - duplicated(df $ name)「來跳過'newname'; df $ name [dup] < - paste(df $ name [dup],「 - duplicated」)'。 – Laterow

+0

非常感謝你們花時間幫助我。比我的幾個步驟更簡單,更高效。謝謝@ user2133017,Laterow和docendo discimus。問候隊友。 – aoceano

+0

什麼我也忘了提及有關添加新列的@docendo discimus想法,是名稱列在數據庫中「獨一無二」,因此除非更改名稱,也沒有辦法在複製的行添加數據庫。但是標記重複的標記是一個更好的主意。 – aoceano

相關問題