gpt4 book ai didi

r - 组合不等长和非唯一值的向量

转载 作者:行者123 更新时间:2023-12-04 09:23:44 24 4
gpt4 key购买 nike

我想做以下事情:

组合成一个数据框,两个向量

  • 有不同的长度
  • 包含在另一个向量中也发现的序列
  • 包含在另一个向量中找不到的序列
  • 在其他向量中找不到的序列永远不会超过 3 个元素
  • 始终具有相同的第一个元素

  • 数据框应显示对齐的两个向量中的相同序列,如果向量缺少另一个向量中存在的序列,则列中为 NA。

    例如:
    vector 1    vector 2                     vector 1        vector 2
    1 1 a a
    2 2 g g
    3 3 b b
    4 1 or h a
    1 2 a g
    2 3 g b
    5 4 c h
    5 c

    应该合并成数据框
        1   1                                    a   a
    2 2 g g
    3 3 b b
    4 NA h NA
    1 1 or a a
    2 2 g g
    NA 3 NA b
    NA 4 NA h
    5 5 c c

    我所做的是搜索合并、合并、cbind、plyr 示例,但无法找到解决方案。恐怕我需要开始编写一个带有嵌套 for 循环的函数来解决这个问题。

    最佳答案

    备注 - 这是作为对 OP 第一版的回答而提出的。从那时起该问题已被修改,但在我看来问题仍然没有明确定义。

    这是适用于您的 integer 的解决方案例如,也适用于 numeric向量。我还假设:

  • 两个向量包含相同数量的序列
  • 一个新的序列开始于 value[i+1] <= value[i]

  • 如果您的向量是非数字的,或者我的假设之一不适合您的问题,则您必须澄清。
    v1 <- c(1,2,3,4,1,2,5)
    v2 <- c(1,2,3,1,2,3,4,5)

    v1.sequences <- split(v1, cumsum(c(TRUE, diff(v1) <= 0)))
    v2.sequences <- split(v2, cumsum(c(TRUE, diff(v2) <= 0)))

    align.fun <- function(s1, s2) { #aligns two sequences
    s12 <- sort(unique(c(s1, s2)))
    cbind(ifelse(s12 %in% s1, s12, NA),
    ifelse(s12 %in% s2, s12, NA))
    }

    do.call(rbind, mapply(align.fun, v1.sequences, v2.sequences))
    # [,1] [,2]
    # [1,] 1 1
    # [2,] 2 2
    # [3,] 3 3
    # [4,] 4 NA
    # [5,] 1 1
    # [6,] 2 2
    # [7,] NA 3
    # [8,] NA 4
    # [9,] 5 5

    关于r - 组合不等长和非唯一值的向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13895819/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com