【问题标题】:merge data frames by character and rowname按字符和行名合并数据框
【发布时间】:2018-01-29 04:44:54
【问题描述】:

我有两个这样的数据框:

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 的行名匹配的字符值。但它也有NAs 并且可能包含df2 中不存在对应行名的字符。

我现在想将这些数据框合并为一个,如下所示:

           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) 解决方案。

【问题讨论】:

    标签: r merge dplyr tidyr


    【解决方案1】:

    我们可以使用rownames_to_column从行名创建一列,然后执行left_join

    library(tidyverse)
    rownames_to_column(df2, "v2") %>%
                       left_join(df1, .)
    

    【讨论】:

      猜你喜欢
      • 2014-05-02
      • 1970-01-01
      • 2018-04-23
      • 2018-03-09
      • 2023-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多