Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 使用left_join()连接两个数据帧_R_Dataframe_Dplyr_Left Join_Tidyr - Fatal编程技术网

R 使用left_join()连接两个数据帧

R 使用left_join()连接两个数据帧,r,dataframe,dplyr,left-join,tidyr,R,Dataframe,Dplyr,Left Join,Tidyr,我正在尝试在R中创建两个数据帧(df_a和df_b)(基本上我想用df_b中包含的更新数据重新填充df_a)。df_b中的列都出现在df_a中。在df_b中,ref_transcript_name、ref_transcript_id和ref_gene_name中存在(重要的)冗余,但是qry_transcript_id的所有值都是唯一的,并且与df_a有一对一的关系。我在这里的假设是一个左join()就可以了。我试过: df_cleft_join将所有数据保留在第一个数据帧中。基本上,如果df_

我正在尝试在R中创建两个数据帧(
df_a
df_b
)(基本上我想用
df_b
中包含的更新数据重新填充
df_a
)。
df_b
中的列都出现在
df_a
中。在
df_b
中,
ref_transcript_name
ref_transcript_id
ref_gene_name
中存在(重要的)冗余,但是
qry_transcript_id
的所有值都是唯一的,并且与
df_a
有一对一的关系。我在这里的假设是一个
左join()
就可以了。我试过:


  • df_cleft_join将所有数据保留在第一个数据帧中。基本上,如果df_b中的列都在df_a中,那么它将不起任何作用,如第一种情况所示:

    df_c <- left_join(df_a, df_b)
    

    df_cleft_join将所有数据保留在第一个数据帧中。基本上,如果df_b中的列都在df_a中,那么它将不起任何作用,如第一种情况所示:

    df_c <- left_join(df_a, df_b)
    

    df_c您可以使用
    mutate
    coalise
    以及
    left_join
    来实现合并要求。试试下面的例子

     x <- data.frame(Id  = c("A", "B", "C", "C", "E"),
                     X1  = c(1L, 3L, 5L, 7L, NA),
                     XY  = c("x2", "x4", "x6", "x8", NA),
                     XZ  = c("x2", NA, NA, "x8", "x10"))
     
     y <- data.frame(Id  = c("A", "B", "B", "D", "E"),
                     Y1  = c(1L, 3L, 5L, 7L, 9L),
                     XY  = c("y1", "y3", "y5", "y7", "y9"),
                     XZ  = c("y1", "y3", "y5", "y7", "y9"))
     
    aa <- x %>% left_join(y, by="Id") %>% 
                mutate(XY = coalesce(XY.x,XY.y)) %>% 
                mutate(XZ = coalesce(XZ.x,XZ.y)) %>% select(Id, X1, XY, XZ)
    
    > aa 
      Id X1 XY   XZ
    1  A  1 x2   x2
    2  B  3 x4   y3
    3  B  3 x4   y5
    4  C  5 x6 <NA>
    5  C  7 x8   x8
    6  E NA y9  x10
    
    x%
    突变(XZ=coalesce(XZ.x,XZ.y))%>%select(Id,X1,XY,XZ)
    >aa
    Id X1 XY XZ
    1a 1x2x2
    2B3X4Y3
    3b3x4y5
    4c5x6
    5C7x8x8
    6 E NA y9 x10
    
    您可以使用
    mutate
    coalise
    以及
    left\u join
    来实现合并要求。试试下面的例子

     x <- data.frame(Id  = c("A", "B", "C", "C", "E"),
                     X1  = c(1L, 3L, 5L, 7L, NA),
                     XY  = c("x2", "x4", "x6", "x8", NA),
                     XZ  = c("x2", NA, NA, "x8", "x10"))
     
     y <- data.frame(Id  = c("A", "B", "B", "D", "E"),
                     Y1  = c(1L, 3L, 5L, 7L, 9L),
                     XY  = c("y1", "y3", "y5", "y7", "y9"),
                     XZ  = c("y1", "y3", "y5", "y7", "y9"))
     
    aa <- x %>% left_join(y, by="Id") %>% 
                mutate(XY = coalesce(XY.x,XY.y)) %>% 
                mutate(XZ = coalesce(XZ.x,XZ.y)) %>% select(Id, X1, XY, XZ)
    
    > aa 
      Id X1 XY   XZ
    1  A  1 x2   x2
    2  B  3 x4   y3
    3  B  3 x4   y5
    4  C  5 x6 <NA>
    5  C  7 x8   x8
    6  E NA y9  x10
    
    x%
    突变(XZ=coalesce(XZ.x,XZ.y))%>%select(Id,X1,XY,XZ)
    >aa
    Id X1 XY XZ
    1a 1x2x2
    2B3X4Y3
    3b3x4y5
    4c5x6
    5C7x8x8
    6 E NA y9 x10
    
    好的,很好。感谢您用
    左join()
    解决了我的困惑。不
    internal_join()
    只返回一个df,其中包含
    df_a
    中匹配
    df_b
    的行?基本上,我想用
    df_b
    的值重新填充
    df_a
    ,但保留
    df_a
    中的其余数据。我原来的帖子在这方面可能不太清楚。好吧,太好了。感谢您用
    左join()
    解决了我的困惑。不
    internal_join()
    只返回一个df,其中包含
    df_a
    中匹配
    df_b
    的行?基本上,我想用
    df_b
    的值重新填充
    df_a
    ,但保留
    df_a
    中的其余数据。在这方面,我最初的帖子可能没有那么清楚。
     x <- data.frame(Id  = c("A", "B", "C", "C", "E"),
                     X1  = c(1L, 3L, 5L, 7L, NA),
                     XY  = c("x2", "x4", "x6", "x8", NA),
                     XZ  = c("x2", NA, NA, "x8", "x10"))
     
     y <- data.frame(Id  = c("A", "B", "B", "D", "E"),
                     Y1  = c(1L, 3L, 5L, 7L, 9L),
                     XY  = c("y1", "y3", "y5", "y7", "y9"),
                     XZ  = c("y1", "y3", "y5", "y7", "y9"))
     
    aa <- x %>% left_join(y, by="Id") %>% 
                mutate(XY = coalesce(XY.x,XY.y)) %>% 
                mutate(XZ = coalesce(XZ.x,XZ.y)) %>% select(Id, X1, XY, XZ)
    
    > aa 
      Id X1 XY   XZ
    1  A  1 x2   x2
    2  B  3 x4   y3
    3  B  3 x4   y5
    4  C  5 x6 <NA>
    5  C  7 x8   x8
    6  E NA y9  x10