【问题标题】:R remove repetitive strings [duplicate]R删除重复的字符串[重复]
【发布时间】:2019-06-10 03:12:04
【问题描述】:

我想删除 R 中的重复字符串。 我简化了我的情况并尝试了两件事。

#1 remove a vector
x=c("a","a","b","c","d")
x[-(x=="a")] 

我预计它会删除所有“a”,但结果是

[1] "a" "b" "c"

其次,我尝试了“NULL”

x[x=="a"]=NULL

但是有一个错误:

Error in x[x == "a"] = NULL : replacement   has length zero

如何删除重复的字符串?在这种情况下,删除所有“a”并打印

[1] "b" "c" "d"

?

【问题讨论】:

  • 有一种方法可以将“a”强制为 NA 并执行 na.omit() 但我希望有更好的解决方案
  • 将您的 - 更改为 !。我们使用! 表示not,以防您想从TRUE 更改为FALSE,但如果您有整数,则使用-。所以在你的情况下,你应该做 x[!(x=="a")]x[x!="a"] 读为 x such that x is not equal to a
  • @Onyambu - 甚至x[ -which(x == "a") ]

标签: r string null


【解决方案1】:

如果打算在重复时删除 'a',则使用 table 获取元素的频率,并根据该子集使用 %in% 和否定 (!) 的字符串

x[!x %in% names(which(table(x) > 1))]
#[1] "b" "c" "d"

或使用duplicated

x[!(duplicated(x)|duplicated(x, fromLast = TRUE))]

或者如果是基于重复的相邻元素,使用rle

with(rle(x), values[lengths ==1])
#[1] "b" "c" "d"

注意:以上所有内容都以编程方式删除元素,而不是手动检查


从 OP 的 cmets 可以清楚地看出,他们只想删除已知重复的特定元素。在这种情况下,

x[! x %in% c("a")]

这里我们使用%in%,因为==只能用于比较单个元素

【讨论】:

  • 非常感谢您的评论,但我忘了说我不想删除所有重复的案例。实际上,向量更复杂,例如 ("americans","americans","applause","applause","applause","is","is","is"...)。我想删除特定的向量,比如“is”。
  • @Damelim 在这种情况下,只需执行 x[! x %in% c("is", "applause")] 我正在使用 %in% 来检查多个元素 == 仅适用于单个元素
  • 这就是我想要的代码!非常感谢
猜你喜欢
  • 2021-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-30
  • 2020-11-16
  • 2017-12-26
  • 1970-01-01
相关资源
最近更新 更多