删除单个单元格中的重复ID

时间:2017-12-28 16:03:37

标签: r duplicates data.table

我在R中有一个包含多个列的数据表,其中一列的ID由&#34分隔; //"。有些是重复的,我需要删除重复项并保留唯一ID。因此,第3列中的第1,2,5行需要看起来像下面示例中第1列中的第1,2,5行。由"分隔的ID数量。 //"至少是2.

library(data.table)
d <- data.table(letter = LETTERS[1:5], number = 1:5, id = paste(LETTERS[1:5], c(LETTERS[1:2], LETTERS[1:2], LETTERS[5]), sep = " // "))

2 个答案:

答案 0 :(得分:2)

你可以试试这个:

library(data.table)
d <- data.table(letter = LETTERS[1:5], number = 1:5, id = paste(LETTERS[1:5], c(LETTERS[1:2], LETTERS[1:2], LETTERS[5]), sep = " // "))

# Split id by one or more / surrounded with spaces
# And calculate how many unique values there are
d[, id2 := ifelse(length(unique(unlist(strsplit(id, " (/)\\1+ ")))) == 1, 
                         letter, 
                         id), 
   1:nrow(d)]

<强>结果:

   letter number     id    id2
1:      A      1 A // A      A
2:      B      2 B // B      B
3:      C      3 C // A C // A
4:      D      4 D // B D // B
5:      E      5 E // E      E

答案 1 :(得分:0)

你可以试试这个: -

d[, flag := substr(id, 1, 1) == substr(id, 6, 6)]
d[flag == T, id := substr(id, 1, 1)]
d[, flag := NULL]
d

您将获得所需的输出: -

        letter number id
1:      A      1      A
2:      B      2      B
3:      C      3 C // A
4:      D      4 D // B
5:      E      5      E

<强>更新

以下是针对此问题的单行解决方案: -

d[substr(id, 1, 1) == substr(id, 6, 6), id := substr(id, 1, 1)]