代码之家  ›  专栏  ›  技术社区  ›  DSA

基于R中的引用将矢量的值替换为数据帧列的值

  •  2
  • DSA  · 技术社区  · 1 年前

    我试图在正常情况下做一项简单的任务,然而,在这种情况下,我处理的是不同格式的大数据(snp.data,GENABEL包)。因此,这里的挑战不是任务本身,而是在没有进一步数据操作的情况下,设法在单行代码中完成任务。

    因此,我试图在不同的数据帧中使用不同的变量来更改列(在操作过程中充当向量)。同样的数据帧也有一个引用列,用于匹配将要更改的变量。

    让我用一个可重复的例子来解释:

    vec = c("424","425","426","429", "430", "455","467","468")
    
    df = data.frame(ID = c("426","429", "430","424","425","455","467","468", "508","601"),
                   ID_rep = c("D1","D2", "D3","D4","D5","D6","D7","D8","D9","D10"))
    

    所以 vec 应该用更改 ID_rep 中的列 df 基于的匹配信息 ID 中的列(引用) df 再一次

    换句话说 vec 应该从此开始:

    > vec
    [1] "424" "425" "426" "429" "430" "455" "467" "468"
    

    对此:

    > desired.result
    [1] "D4" "D5" "D1" "D2" "D3" "D6" "D7" "D8"
    

    同样,这将改变元数据中像列一样的向量,所以我不认为多步骤数据处理方法是不可行的,因为这部分数据有很多不同的结构和不均匀的大小。

    提前感谢!

    2 回复  |  直到 1 年前
        1
  •  1
  •   guasi    1 年前

    像这样的东西?

    desired.result <- df$ID_rep[match(vec, df$ID)]
    

    输出

    [1] "D4" "D5" "D1" "D2" "D3" "D6" "D7" "D8"
    
        2
  •  0
  •   langtang    1 年前

    你可以改变你的 vec 达到您想要的效果,如下所示:

    unname(setNames(df$ID_rep, df$ID)[vec])
    

    输出

    [1] "D4" "D5" "D1" "D2" "D3" "D6" "D7" "D8"