当前位置: 首页 > 知识库问答 >
问题:

如何使用*Alternative*列合并R中的数据帧

澹台阳秋
2023-03-14

我试图在R中合并2个数据帧,但我有两个不同的列,带有不同类型的ID变量。有时一行会有其中一列的值,而另一列却没有。我想同时考虑它们,这样,如果一个帧缺少一个列的值,那么将使用另一个列。

> df1 <- data.frame(first = c('a', 'b', NA),  second = c(NA, 'q', 'r'))
> df1
first second
1     a   <NA>
2     b      q
3  <NA>      r

> df2 <- data.frame(first = c('a', NA, 'c'),  second = c('p', 'q', NA))
> df2
  first second
1     a      p
2  <NA>      q
3     c   <NA>

我想合并这两个数据帧,得到2行:

    null
> merge(df1,df2, by='first', incomparables = c(NA))
  first second.x second.y
1     a     <NA>        p
> merge(df1,df2, by='second', incomparables = c(NA))
  second first.x first.y
1      q       b    <NA>

编辑:理想情况下,输出如下所示:

> df3 <- data.frame(first = c('a', 'b'), second = c('p','q'))
> df3
  first second
1     a      p
2     b      q
  • 第1行匹配,因为列“first”在两个数据帧中具有相同的值,并且它填充了来自DF2的“second”的值
  • 第2行匹配,因为列“second”在两个数据帧中具有相同的值,并且它填充了来自DF1的“first”的值
  • 没有第3行,因为没有在两个数据帧中都有值的列

共有1个答案

阳光辉
2023-03-14

使用sqldf我们可以这样做,就像在SQL中一样,我们可以使用来交替连接条件

library(sqldf)
df <- sqldf("select a.*, b.*
               from df1 a
               join df2 b
                    ON a.first = b.first
                    OR a.second = b.second")


library(dplyr)
       #If value in first is NA i.e. is.na(first) is TRUE then use first..3 value's else use first value's and the same for second
df %>% mutate(first = ifelse(is.na(first), first..3, first),
              second = ifelse(is.na(second), second..4, second)) %>% 
       #Discard first..3 and second..4 since we no longer need them    
       select(-first..3, -second..4) 

  first second
1     a      p
2     b      q
 类似资料:
  • 本文向大家介绍如何在R中合并列表?,包括了如何在R中合并列表?的使用技巧和注意事项,需要的朋友参考一下 当我们有多个列表但它们具有相似的数据类型时,我们可能想要合并或合并这些列表。这将有助于使用,因为我们可以使用一个列表名称执行计算,而不是将其应用于多个列表名称。我们可以借助mapply函数组合多个列表。 示例 请看以下列表- 现在假设,我们还有一个列表,即List3,然后可以按照如下所示的相同方

  • 我最近写了 这似乎很尴尬。我知道(以及其他一些包)定义了 但即便如此,这一切都感觉有点手动。有什么我没见过的收紧它的好模式吗?

  • 本文向大家介绍如何在R中合并具有相同列数的矩阵?,包括了如何在R中合并具有相同列数的矩阵?的使用技巧和注意事项,需要的朋友参考一下 列数相同的矩阵可以按行合并。例如,如果我们有五个矩阵列表,每个矩阵都有六列,则可以通过合并这些矩阵的行将这些矩阵转换为单个矩阵。可以使用do.call(rbind,“ List_of_matrices_object_name”)来完成。 示例 请看以下矩阵及其列表-

  • 本文向大家介绍如何标准化R数据框中的列?,包括了如何标准化R数据框中的列?的使用技巧和注意事项,需要的朋友参考一下 这可以通过使用缩放功能来完成。 示例