我有一个看起来像这样的数据框
1 TSS1500
2 Body;TSS1500
3 Body;Body;Body
我想从每一行删除重复的条目,使其看起来像这样
1 TSS1500
2 Body;TSS1500
3 Body
非常感谢你的帮助。
答案 0 :(得分:0)
看起来你的数据框只有两列。第一列是1到3的ID,而第二列包含字符串。每个字符串包含&#34 ;;"分隔单词,你想删除重复的单词。
我相信您在评论中提出的cSplit
可能来自splitstackshape
包,这是一个很好的方法。将这些单词拆分为";"后,您就可以使用Zen先生的帖子解决方案。
在这里,我使用dplyr
和tidyr
提供了另一种方法。我们的想法是使用separate_row
来扩展"通过拆分;
来记录每条记录。之后,group_by
和distinct
可以删除这些重复项。最后一步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
或其他方式分享最小和可重复性。这可以让其他人更好地帮助您。您可以通过查看您发布的示例来看到它,不完全清楚它是数据框还是您有多少列。重建数据集也需要额外的时间,并且无法保证重新创建的数据集与您的数据集相同。