【问题标题】:Selecting and matching multiple vectors in a list in R在R中的列表中选择和匹配多个向量
【发布时间】:2014-05-20 20:08:26
【问题描述】:

我有一个这样的向量列表:

>list

[[1]]

[1] "a" "m" "l" "s" "t" "o"

[[2]]

[1] "m" "y" "o" "t" "e"

[[3]]

[1] "n" "a" "s" 

[[4]]

[1] "b" "u" "z" "u" "l" "a"

[[5]]

[1] "c" "m" "u" "s" "r" "i" "x" "t"

1-首先,我想在表格中选择元素数量最多的向量(在本例中为第 5 个具有 8 个元素的向量)。这很容易。

2-Second 我想选择列表中长度等于或小于前一个的所有向量,并将它们与前一个向量相交。

我的另一种可能性是选择第一个字符的名称。在这种情况下,这相当于选择以“a”或“b”开头的向量,即列表中的第一个和第四个。在这种情况下,我不知道如何在知道它们的第一个元素的列表中选择多个向量。

3-最后,我想只保留具有最少匹配数的交集。

在这种情况下,列表中的四个向量,以“b”开头。然后对其余向量再次开始该过程,但在“相交”时已经考虑了第 4 和第 5 个向量。在这种情况下,将选取第二个元素并将该元素与第 4 和第 5 的“unique() 组合”相交。

我希望我已经解释了自己!有没有办法在没有 3-4 个“for”和“if”循环的情况下在 R 中做到这一点?换句话说。有没有使用 lapply 或类似方法的聪明方法?

【问题讨论】:

  • 请通过dputing 输入您的输入列表和所需结果,让人们更容易帮助您。见here。请向我们展示您尝试过的代码以及为什么它不能满足您的需求。分享您的尝试对每个人都有帮助。它表明您已经花时间尝试帮助自己,它使我们免于重复明显的答案,它可以帮助您获得更具体和相关的答案。干杯。
  • 抱歉解释含糊。对我来说,如果输出是一个包含所选向量的第一个字符的列表,它就可以工作。在这种情况下,它将是“c”“b”“m”“n”。一旦我设置了整个循环,我将把它上传到这里。再次抱歉。
  • 不管怎样,现在已经解决了,也许我很快就跳到了这里:)

标签: r list vector


【解决方案1】:

这应该做吗?

list <- strsplit(list("amlsto", "myote","nas","buzula","cmsusrixt"), "")
# find minimum length
lens <- sapply(list, length)
which.min(lens)
# which are same or 1 shorter than previous
inds <- which (lens==c(-1,head(lens, -1)) | lens==c(-1,head(lens,-1))-1)
# get the intersections
inters <- mapply(intersect, list[inds], list[inds-1], SIMPLIFY=FALSE)
#Get items where first in vector is in target set
target <- c("a","b")
isTarget <- sapply(list, "[[",1) %in% target

# Minimum number of overlaps
which.min(lapply(inters, length))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-07
    • 2020-10-14
    • 1970-01-01
    • 2017-03-19
    • 1970-01-01
    • 1970-01-01
    • 2015-09-16
    相关资源
    最近更新 更多