当前位置: 首页 > 知识库问答 >
问题:

删除包含矩阵某些元素的子列表

艾子石
2023-03-14

考虑矩阵:

badcombos
      [,1]      [,2] 
[1,] "Red"    "Yellow"
[2,] "Green"  "Yellow"
[3,] "Orange" "Yellow"
[4,] "Blue"   "Green"
[5,] "Blue"   "Purple"

然后,列表:

allcombos
[[1]]
[1] "Red" "Green" "Orange" "Pink" "Purple"
[[2]]
[1] "Red" "Red" "Brown" "Purple" "Pink"
[[3]]
[1] "Yellow" "Red" "Brown" "Blue" "Purple"
[[4]]
[1] "Yellow" "Green" "Blue" "Purple" "Gold"
....
[[k]] "Red" "Blue" "Orange" "Brown" "Pink

如果badcombos矩阵中的任何颜色组合出现在列表中(即上例中的子列表[[3]]和[[4]]),则将从列表中删除,我如何根据这些条件“减少”列表。

my_list = list()
my_list[[1]] = c("Red","Green","Orange","Pink","Purple")
my_list[[2]] = c("Red","Red","Brown","Purple","Pink")
my_list[[3]] = c("Yellow","Red","Brown","Blue","Purple")
my_list[[4]] = c("Yellow","Green","Blue","Purple","Gold")
my_list[[5]] = c("Red","Blue","Orange","Brown","Pink")

my_matrix = t(matrix(c("Red","Yellow","Green","Yellow","Orange","Yellow","Blue","Green","Blue","Purple"),2,5))

共有2个答案

姚钊
2023-03-14

下面是使用%中的%检查“坏”列表中存在哪些值的一次尝试:

sel <- mapply(
  function(a,b) all(rowSums(matrix(b %in% a,ncol=2))<2),
  my_list, list(my_matrix)
)
#[1]  TRUE  TRUE FALSE FALSE  TRUE

然后选择您想要的:

my_list[sel]

贝浩歌
2023-03-14

另一种方法是:

match_first_col  <- lapply(my_list,match,my_matrix[,1])
match_second_col <- lapply(my_list,match,my_matrix[,2])

#Elements of the list that match both columns:
is.na(mapply(intersect, match_first_col,match_second_col))
[1]  TRUE  TRUE FALSE FALSE  TRUE

#Keep only allcombos with no match in first and second column
my_list[is.na(mapply(intersect, match_first_col,match_second_col))]

[[1]]
[1] "Red"    "Green"  "Orange" "Pink"   "Purple"

[[2]]
[1] "Red"    "Red"    "Brown"  "Purple" "Pink"  

[[3]]
[1] "Red"    "Blue"   "Orange" "Brown"  "Pink" 
 类似资料:
  • 我有以下问题: 我有一个矩阵。现在,我想在矩阵的每一行中删除一个条目:在包含某个数字(比如4)的行中,我想删除带有该数字的条目,在其他行中,我只想删除最后一个元素。 如果我有矩阵 这给了 2 0 4 0 删除后应该只是 2. 0 谢谢你的帮助!

  • 问题内容: 我正在尝试从文本文件中读取文本,读取行,删除包含特定字符串的行(在这种情况下为“坏”和“顽皮”)。我写的代码是这样的: 我这样写,但没有成功。 重要的一件事是,如果文本的内容是这样的: 我不希望输出有空行。所以不喜欢: 但是像这样: 我应该从上面的代码中编辑什么? 问题答案: 您可以像这样使代码更简单,更易读 使用上下文管理器和任何。

  • 我正在使用OpenCV一段时间,现在我需要这种类型的乘法: 定义一个矩阵,其中包含类型为1的元素。矩阵的大小为:M X N。矩阵必须与Vector相乘,Vector的大小为:N X 1,包含双

  • 我是新的VBA和不是非常熟练的编程,所以我希望在这里得到一些帮助。 提前谢了。

  • 我有一个包含元素的ArrayList(字段是name和type)。只有两种不同的可能类型(“edu”和“ent”),我希望每个类型都显示在自己的listview中。 我的想法是创建两个具有相同数据的新ArrayList,然后循环遍历每个并过滤不需要的元素,如下所示: ArrayList中有10个元素,每种类型5个。 问题是,在两个列表视图的末尾,有4个相同的项目以混合类型显示。 知道我做错了什么吗

  • 我正在尝试删除此df中的所有行,其中“DB Serial”列包含字符*: 我正在使用: 但我得到这个错误: