2016-02-17 63 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

相关问题