【问题标题】:Combine vectors of list in R在R中组合列表的向量
【发布时间】:2017-12-07 18:35:33
【问题描述】:

我有一个包含不同长度的向量的列表,如下所示:

lst <- list(c(1,2), c(1,2), c(4,5,10,11,12,13), c(7,8,9))
lst

[[1]]
[1] 1 2

[[2]]
[1] 1 2

[[3]]
[1]  4  5 10 11 12 13

[[4]]
[1] 7 8 9

[[5]]
[1] 7 8 9

如何组合和删除重复的向量,使其类似于下面的列表:

[[1]]
[1] 1 2

[[2]]
[1]  4  5 10 11 12 13

[[3]]
[1] 7 8 9

对于重复的向量,我可以使用独特的功能

【问题讨论】:

  • 问题不清楚。您是否要删除所有重复的数字,无论它们出现在哪里,或者是否任何向量都需要完全包含在另一个向量中才能被删除?当前答案之一处理第一种情况。
  • 那么,您希望子列表[1] 10 11 12 13 也被删除,因为这些列表包含在[1] 4 5 10 11 12 13 中?
  • 看看这个答案,它可能会解决你的问题:stackoverflow.com/a/27521122/3521006

标签: r list vector


【解决方案1】:

这是一种选择。我们unlistlist,得到一个逻辑vectorduplicatedrelist 它到一个list,它具有与原始skeleton 相同的skeleton,基于'l1' 的子集逻辑 listMapFilterlist 元素有 0 个元素。

Filter(length, Map(`[`, l1, relist(!duplicated(unlist(l1)), skeleton = l1)))
#[[1]]
#[1] 1 2

#[[2]]
#[1]  4  5 10 11 12 13

#[[3]]
#[1] 7 8 9

#[[4]]
#[1] 14 15

#[[5]]
#[1] 19 20

数据

l1 <- list(1:2, 1:2, c(4, 5, 10, 11, 12, 13), 7:9, 7:9, 10:13, 10:13, 
  c(4, 10, 11, 12, 13), 14:15, 19:20)

【讨论】:

  • @MbrMbr 关于unique 的帖子中提到的OP,它可能不适用于其他重复元素。与 5 个列表元素相比,它还获得 7 个 list 元素
  • 你能详细说明你的第一行代码是做什么的吗?
  • @KarstenW。更新了一些描述。
  • 谢谢,我看到它有效,但我仍然需要了解它,尤其是 duplicated 在此设置中如何有用..
【解决方案2】:

我已经编辑了您的答案,以提供一个可重复的示例。如果这不能正确说明您的问题,请告诉我。如果是这样,这很简单:

unique(lst)

【讨论】:

  • 它不起作用,并且已经在 OP' 帖子中提到过
  • 对于unique 提供的示例工作正常。如果它在 OP 的真正问题中不起作用,那么我们需要一个不同的示例。
  • 我已经在我的帖子中展示了这个例子。你可以用那个检查你的代码
【解决方案3】:

对不起,我的问题列表有误

[1]  1 2
[1]  1 2
[1]  10  12 13
[1]  7 8 9
[1]  7 8 9
[1]  5 11 12 13
[1]  10 11 12 13
[1]  4 10 11 12 13
[1]  14 15
[1]  19 20

我想得到下面的列表:

[1]  1 2
[1]  4 5 10 11 12 13
[1]  14 15
[1]  19 20

通过使用独特的功能,我可以删除所有重复向量 但是,我想合并所有共享至少一个元素的向量 EX 合并 (10 12 13)

   [1]  5 11 12 13
    [1]  10 11 12 13
    [1]  4 10 11 12 13

得到

4 5 10 11 12 13

【讨论】:

  • 我再次道歉,我意识到我的错误很晚
  • 没关系。感谢您的来信
猜你喜欢
  • 1970-01-01
  • 2021-08-22
  • 1970-01-01
  • 2021-11-26
  • 2017-02-19
  • 2013-03-09
  • 1970-01-01
  • 2014-06-16
  • 1970-01-01
相关资源
最近更新 更多