删除每一行中的重复条目

时间:2017-11-22 21:21:51

标签: r duplicates row

我有一个看起来像这样的数据框

1 TSS1500
2 Body;TSS1500
3 Body;Body;Body

我想从每一行删除重复的条目,使其看起来像这样

1 TSS1500
2 Body;TSS1500
3 Body

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

看起来你的数据框只有两列。第一列是1到3的ID,而第二列包含字符串。每个字符串包含&#34 ;;"分隔单词,你想删除重复的单词。

我相信您在评论中提出的cSplit可能来自splitstackshape包,这是一个很好的方法。将这些单词拆分为";"后,您就可以使用Zen先生的帖子解决方案。

在这里,我使用dplyrtidyr提供了另一种方法。我们的想法是使用separate_row来扩展"通过拆分;来记录每条记录。之后,group_bydistinct可以删除这些重复项。最后一步summarise paste0和设置collapse = ";",允许我们将数据框格转换回原始格式。

### Create example data frame
dt <- read.table(text = "1 TSS1500
2 'Body;TSS1500'
                 3 'Body;Body;Body'",
                 header = FALSE, stringsAsFactors = FALSE)
dt

#   V1             V2
# 1  1        TSS1500
# 2  2   Body;TSS1500
# 3  3 Body;Body;Body

# Load packages
library(dplyr)
library(tidyr)

dt2 <- dt %>%
  # Expland each record by spliting ";"
  separate_rows(V2) %>%
  # Grouping based on V1
  group_by(V1) %>%
  # Remove duplicated rows
  distinct(V2) %>%
  # Combine rows from the same group together
  summarise(V2 = paste0(V2, collapse = ";"))
dt2
# # A tibble: 3 x 2
#      V1           V2
#   <int>        <chr>
# 1     1      TSS1500
# 2     2 Body;TSS1500
# 3     3         Body  

下次,如果您想提出新问题,请考虑使用dput或其他方式分享最小和可重复性。这可以让其他人更好地帮助您。您可以通过查看您发布的示例来看到它,不完全清楚它是数据框还是您有多少列。重建数据集也需要额外的时间,并且无法保证重新创建的数据集与您的数据集相同。