我有两个这样的数据框:
set.seed(1)
df1 <- data.frame(v1 = rnorm(7),
v2 = c("a1", NA, "a2", "a3", "a5", "a6", "a9"))
> df1
v1 v2
1 0.39956187 a1
2 0.33711756 <NA>
3 -0.19583763 a2
4 0.04880812 a3
5 -2.07266374 a5
6 -0.83824743 a6
7 1.31302096 a9
df2 <- data.frame(pc1 = rnorm(5),
pc2 = rnorm(5))
rownames(df2) <- c("a1", "a2", "a3", "a6", "a9")
> df2
pc1 pc2
a1 -0.89865755 -0.32949632
a2 -0.05709327 -0.06923935
a3 -0.44229588 0.32089049
a6 -1.51754734 -0.34285758
a9 0.99955141 -0.62749542
df1
的列v2
包含与df2
的rownames匹配的字符值。但它也有NA
个,可能包含df2
中没有相应的rownames的字符。
我现在想要将这些数据框合并为一个,如下所示:
v1 v2 pc1 pc2
1 0.39956187 a1 -0.89865755 -0.32949632
2 0.33711756 NA NA NA
3 -0.19583763 a2 -0.05709327 -0.06923935
4 0.04880812 a3 -0.44229588 0.32089049
5 -2.07266374 a5 NA NA
6 -0.83824743 a6 -1.51754734 -0.34285758
7 1.31302096 a9 0.99955141 -0.62749542
我该怎么办?我更喜欢 dplyr ( tydiverse )解决方案。
答案 0 :(得分:5)
我们可以使用rownames_to_column
从行名称创建列,然后执行left_join
library(tidyverse)
rownames_to_column(df2, "v2") %>%
left_join(df1, .)