【问题标题】:Matching two dataframes according to rowname and adding NA根据rowname匹配两个数据框并添加NA
【发布时间】:2020-01-21 17:04:16
【问题描述】:

我有 3 个数据帧,随着时间的推移,变量的值不均匀:

每个观察的数据框只包含有值的变量。

dataframe_a

  time_1
a    1
b    2
c    3
d    4

dataframe_b

   time_2
a    1
c    3
d    4
e    2

dataframe_c

 time_3
a    1
b    3
d    4
e    2

并且想要一个数据框,例如:

  time_1 time_2 time_3
a    1      1       1
b    3     NA       3
c    4      3       NA
d    2      4       4
e    NA     2       2

我想根据行名进行匹配,如果该观察值没有值,则添加缺失值 当在数据帧/观察 3 上引入变量时,观察 1 和 2 应该有一个 NA

rbind、merge、rbind.fill 等对我没有帮助

谢谢 希望这不是一个常见的问题

【问题讨论】:

  • 您到底尝试了什么,因为您说这些功能不起作用?这似乎是一对简单的左连接
  • 观察b 如何获得3 for time_1?与cd 相同,对于变量time_1 获取42?这不是合并或组合问题,除非是拼写错误。
  • 你说得对,这些都是错别字。这个想法是,我没有每个观察中的每个变量的值,而是每个观察的数据框,只包含观察到的变量的值。所以这就是不匹配的来源。提供的带有 reduce fulljoin 的解决方案对我有用。

标签: r dataframe merge rbind


【解决方案1】:

在将数据集放在list 中后,这是reducefull_join 的一个选项

library(purrr)
library(dplyr)
list(a, b, c) %>%
      reduce(full_join, by = "id")

【讨论】:

    【解决方案2】:

    我认为dplyr 包中的full_join 函数可以帮助您:

    a <- data.frame(id = c("a","b","c","d"),time_1 = 1:4)
    b <- data.frame(id = c("a","c","d","e"),time_2 = c(1,3,4,2))
    c <- data.frame(id = c("a","b","d","e"),time_3 = c(1,3,4,2))
    
    require(dplyr)
    d <- full_join(a,b,by = "id")
    full_join(d,c)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-12
      • 1970-01-01
      • 2021-01-15
      • 2022-11-02
      • 2011-06-20
      • 1970-01-01
      相关资源
      最近更新 更多