R 使用left_join()连接两个数据帧
我正在尝试在R中创建两个数据帧(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_
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