【问题标题】:Filter list based on condition that it contains two contradicting strings根据包含两个矛盾字符串的条件过滤列表
【发布时间】:2017-03-22 15:11:11
【问题描述】:
my_list = list()
my_list[[1]] = c("Fast","Slow","Heavy","Light")
my_list[[2]] = c("Fast","Small","Intelligent","Light")
my_list[[3]] = c("Dumb","Slow","Heavy","Light")
my_list[[4]] = c("Slow","Intelligent","Dumb","Heavy")
my_list[[5]] = c("Heavy","Light","Intelligent","Tall")

这是我正在尝试做的简化版本,但是我如何过滤列表以便如果其中包含两个字符串(即快速和慢速,高和小,重和轻,最后,智能和 Dumb),然后可以将它们移除以留下具有合理向量的最终向量。

我一直在尝试使用 IF 函数来执行此操作,这是最合适的方式吗?

【问题讨论】:

  • 我不确定我是否理解。此示例的所需输出是什么。 R 应该如何知道哪些词是相反/矛盾的?
  • 唯一的输出是 my_list[[2]] 因为它没有下面列出的任何字符串对。快(不慢)、小(不高)、聪明(不笨)和轻(不重)。但基本上我想知道如何使用 IF 函数减少列表,以便删除包含两个特定单词的所有列表。
  • 所以你需要类似(a1 & b1) or (a2 & b2) or (a3 & b3)
  • 首先,将你的“矛盾字符串”放入一个 R 对象中,比如一个 data.frame ......最终(当你有这个健全的格式时)它可能就像合并一样简单,我猜。
  • 没错就是这样

标签: r list filter


【解决方案1】:

这就是你想要的:

cont_check <- function(x) {
    cont_words <- list(c("Fast", "Slow"),
                       c("Heavy", "Light"))
    found <- sum(sapply(cont_words, function (y) sum(y %in% x) == 2)) > 0 
    return(found)
}
sapply(my_list, cont_check)
# select ones
# my_list[!sapply(my_list, cont_check)]

【讨论】:

    猜你喜欢
    • 2021-01-27
    • 2015-01-06
    • 1970-01-01
    • 2021-12-24
    • 2019-02-21
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    • 2011-01-10
    相关资源
    最近更新 更多