【问题标题】:How to merge two vectors according to the original indices?如何根据原始索引合并两个向量?
【发布时间】:2023-03-09 22:26:01
【问题描述】:

我希望能就这个问题得到一些帮助。我有一个包含 2,000 个元素的向量 X

X<- c("A12","B5","B8","B19","A32","A25","B11","A2","A41","B51"......)

我分别从向量中提取了 ID(A ID 和 B ID)。现在我有两个向量,AB。这一步是必须的,因为获取A_valuesB_values的过程不同,所以我需要将这两个ID分成两个向量:

A<-c("A12","A32","A25","A2","A41".....)
B<-c("B5","B8","B19","B11","B51"....)

在这之后我得到了他们的id对应的值:

A_values <- c(15,21,22,6,2....)
B_values <-c(3,14,16,25,13....)

现在我的问题是根据 Id 的原始索引合并 A_valuesB_values 向量,就像它们在原始向量 X 中一样。新的X_values 向量应该是:

X_values<-c(15,3,14,16,21,22,25,6,2,25,13.....)

任何帮助将不胜感激。

【问题讨论】:

    标签: r vector merge


    【解决方案1】:

    您可以创建一个命名向量,然后使用X 对它们进行子集化:

    c(setNames(A_values, A), setNames(B_values, B))[X]
    #A12  B5  B8 B19 A32 A25 B11  A2 A41 B51 
    # 15   3  14  16  21  22  25   6   2  13 
    

    如果不需要,请使用 unnameas.numeric/as.integer 删除名称。

    【讨论】:

      【解决方案2】:

      我们可以使用matching 索引连接'A'、'B'

      c(A_values, B_values)[match(X, c(A, B))]
      #[1] 15  3 14 16 21 22 25  6  2 13
      

      数据

      X<- c("A12","B5","B8","B19","A32","A25","B11","A2","A41","B51")
      A<-c("A12","A32","A25","A2","A41")
      B<-c("B5","B8","B19","B11","B51")
      A_values <- c(15,21,22,6,2)
      B_values <- c(3,14,16,25,13)
      

      【讨论】:

        猜你喜欢
        • 2021-09-19
        • 1970-01-01
        • 1970-01-01
        • 2015-10-28
        • 2021-09-20
        • 2014-11-15
        • 2019-09-30
        • 2020-05-03
        • 1970-01-01
        相关资源
        最近更新 更多