【问题标题】:How to remove duplicate consecutive text in R separated by : [duplicate]如何删除R中重复的连续文本,由:[重复]
【发布时间】:2018-01-09 13:42:04
【问题描述】:

数据集的样子

  id  agent    final_col
1  1   A:A         A
2  1   A:A         A
3  2     B         B
4  3     C         C
5  4 A:C:C       A:C
6  4 A:C:C       A:C
7  4 A:C:C       A:C

如何删除重复的条目,以便在 R 中拥有像 final_col 这样的干净列?

【问题讨论】:

  • 您想只删除重复项还是重复的连续项? A:C:A 应该变成 A:C 还是 A:C:A?在第二种情况下,你可以做sapply(agent, function(x){y=unlist(strsplit(x,':'));paste(y[cumsum(rle(y)$length)],collapse=":")})
  • 删除重复,连续或不连续不相关,我相信我需要改写问题。

标签: r


【解决方案1】:

让我们根据df$agent 生成一个新列

df$final_col <- sapply(df$agent, function(txt){ 
    paste(unique(unlist(strsplit(txt, ":"))), collapse=":")
})

对于我们用: 分割的每个元素,选择唯一的元素,然后再次将它们放在一起。

【讨论】:

  • 是来自 base r 的 strsplit,由于某种原因,我无法重现,它说 strsplit 非字符参数中的错误
  • @ImranAli 因为df$agent 是因素,所以用as.character(df$agent) 包装它。
【解决方案2】:

您可以使用gsub 和正则表达式来做到这一点

gsub("\\b(\\w+)(\\:\\1)+\\b", "\\1", DAT$agent)
[1] "A"   "A"   "B"   "C"   "A:C" "A:C" "A:C"

您的数据

DAT = read.table(text="  id  agent    final_col
1  1   A:A         A
2  1   A:A         A
3  2     B         B
4  3     C         C
5  4 A:C:C       A:C
6  4 A:C:C       A:C
7  4 A:C:C       A:C",
header=TRUE, stringsAsFactors=FALSE)

【讨论】:

    猜你喜欢
    • 2018-12-01
    • 2017-09-20
    • 1970-01-01
    • 2016-07-31
    • 2021-09-14
    • 1970-01-01
    • 2021-05-22
    • 2020-03-30
    • 2013-10-28
    相关资源
    最近更新 更多