【问题标题】:In R, Merge two data frames, fill down the blanks在R中,合并两个数据框,填空
【发布时间】:2013-02-12 23:33:51
【问题描述】:

假设我有这两个数据框:

big.table <- data.frame("idx" = 1:100)

small.table <- data.frame("idx" = sample(1:100, 10), "color" = sample(colors(),10))

我想像这样将它们合并在一起:

merge(small.table, big.table, by = "idx", all.y=TRUE)

idx           color
1     1            <NA>
2     2            <NA>
3     3         salmon2
4     4            <NA>
5     5            <NA>
6     6            <NA>
...
20   20            <NA>
21   21            <NA>
22   22           blue4
23   23          grey99
24   24            <NA>
25   25            <NA>
26   26            <NA>
...

现在我需要填写表格下方“颜色”列中的值,以便将所有 NA 设置为表格中之前的值。

注意事项: 问题涉及从计算机程序生成的日志文件,而不是任何标准日志格式。此日志文件中的行块属于在块的第一行中标识的“进程”。我在日志文件的相关行中提取了信息,其中大部分属于一个进程,并创建了一个包含该信息(行号、时间戳等)的数据表。现在我需要在此表中填写与 small.table 中的每一行对应的“进程”名称,该表具有行号。

对于 big.table 顶部的行,可能没有“进程”(上例中的颜色)。这些行应保持为 NA。

一旦第一个“进程”开始,该进程开始行和下一个进程之间的每一行都属于第一个进程。当第二个进程启动时,该进程启动行和下一个进程启动行之间的每一行都属于第二个进程。等等。进程行与我收集到日志文件数据框中的其他行的行号永远不会相同。

我的计划是将 big.table 创建为所有日志行号的序列,并将小表合并到其中。然后我可以“填写”进程名称并将大表合并到日志文件中,只保留日志文件以及与之相连的所有内容。

我对其他方法持开放态度。

【问题讨论】:

    标签: r merge


    【解决方案1】:

    听起来你需要 zoo 包中的na.locf(代表最后的观察结转):

    library(zoo)
    tbl <- merge(small.table, big.table, by = "idx", all.y=TRUE)
    tbl$color2 <- na.locf(tbl$color,na.rm = FALSE)
    

    【讨论】:

      【解决方案2】:

      data.table 解决方案:

      require(data.table)
      b <- data.table(big.table, key="idx")
      s <- data.table(small.table, key="idx")
      s[b, roll=T]
      
      #      idx          color
      #   1:   1             NA
      #   2:   2             NA
      #   3:   3             NA
      #   4:   4          blue3
      #   5:   5          blue3
      #   6:   6          blue3
      #   7:   7          blue3
      #   8:   8          blue3
      #   9:   9          blue3
      #  10:  10          blue3
      #  11:  11   navajowhite1
      #  12:  12   navajowhite1
      #  . . . .
      

      【讨论】:

        猜你喜欢
        • 2023-03-06
        • 2014-10-04
        • 1970-01-01
        • 2016-04-30
        • 1970-01-01
        • 1970-01-01
        • 2015-12-28
        • 1970-01-01
        相关资源
        最近更新 更多