我有数据1

    BAKUNG  BALATAK    BARUGA  BERINGIN CEMERLANG
1 5.397762 4.4421650 1.1371410 0.1915185 1.2023105
2 4.551889 1.1710558 0.6596748 2.2443573 5.5094816
3 9.290642 1.9318098 0.3717321 0.7481191 2.3554114
4 1.758246 1.6478570 1.1930006 0.7687339 1.5786976
5 2.497720 0.5127110 0.3331624 0.3225225 0.7541041
6 3.080921 0.6563498 1.8712953 1.0959114 1.1883456

和数据2
             BAKUNG           BALATAK   CEMERLANG
1              <NA>              <NA>        <NA>
2              <NA>                 2        <NA>
3                14                 6        <NA>
4                17              <NA>           1
5              <NA>              <NA>        <NA>
6              <NA>              <NA>        <NA>
  AMPANA TETE AMPIBABO
1        <NA>     <NA>
2        <NA>     <NA>
3        <NA>     <NA>
4        <NA>     <NA>
5        <NA>     <NA>
6        <NA>     <NA>

我想从具有相同站名的data1和data2中找到数据站。我想在这里获取数据
    BAKUNG_data1 BAKUNG_data2 BALATAK_data1 BALATAK_data2
 1       5.397762           NA     4.4421650            NA
 2       4.551889           NA     1.1710558             2
 3       9.290642           14     1.9318098             6
 4       1.758246           17     1.6478570            NA
 5       2.497720           NA     0.5127110            NA
 6       3.080921           NA     0.6563498            NA

我试过了
abc <- merge(data1,data2, by = intersect(names(data1), names(data2)))

但是我什么也没有,有什么办法解决吗?

最佳答案

一种方法是获取长格式的数据,然后进行连接,最后获取宽格式的数据。

library(dplyr)
library(tidyr)

inner_join(data1 %>%
            mutate(row = row_number()) %>%
            pivot_longer(cols = -row, values_to = "data1"),
           data2 %>%
            mutate(row = row_number()) %>%
            pivot_longer(cols = -row, values_to = "data2"),
           by = c('name', 'row')) %>%
   pivot_wider(names_from = name, values_from = starts_with('data')) %>%
  select(-row)

关于r - 如何基于R中的列相交数据帧,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60717247/

10-12 16:40
查看更多