代码之家  ›  专栏  ›  技术社区  ›  yuskam

使用与data.table相似的ID中的值重新编码NA

  •  0
  • yuskam  · 技术社区  · 7 年前

    data.table 并尝试通过 b

    library(data.table)
    dt <- data.table(a = rep(1:3, 2),
                     b = c(rep(1,3), rep(2, 3)),
                     c = c(NA, 4, NA, 6, NA, NA))
    
    > dt
       a b  c
    1: 1 1 NA
    2: 2 1  4
    3: 3 1 NA
    4: 1 2  6
    5: 2 2 NA
    6: 3 2 NA
    

    我想得到这个:

    > dt
       a b  c
    1: 1 1  4
    2: 2 1  4
    3: 3 1  4
    4: 1 2  6
    5: 2 2  6
    6: 3 2  6
    

    我试过这些,但都没有达到预期的效果。

    dt[, c := ifelse(is.na(c), !is.na(c), c), by = b]
    dt[is.na(c), c := dt[!is.na(c), .(c)], by = b]
    

    感谢您为我提供一些帮助和一些解释,告诉我在尝试解决问题时应该如何考虑/思考 数据表 方法

    1 回复  |  直到 7 年前
        1
  •  1
  •   s_baldur    7 年前

    假设一个简单的例子,其中只有一个 c 对于每个级别的 b :

    dt[, c := c[!is.na(c)][1], by = b]
    dt