【问题标题】:Copy a value in R [duplicate]在R中复制一个值[重复]
【发布时间】:2018-05-14 18:10:29
【问题描述】:

我有什么:

colA      colB     colC
pen        2        1
NA         yes      no
NA         yes      NA
pencil     1        2
NA         yes      no
NA         no       NA

我想要的是将 colA 中的所有 NA 替换为前面的值。

colA      colB     colC
pen        2        1
pen        yes      no
pen        yes      NA
pencil     1        2
pencil     yes      no
pencil     no       NA

我怎样才能在 R. 中得到这个? 感谢您的帮助。

【问题讨论】:

  • library(dplyr);df %>% fill(colA)
  • replace_na_with_last <- function(x, a =! is.na(x)){ x[which(a)[c(1, 1:sum(a))][cumsum(a)+1]] }
  • @akrun fill 来自tidyr
  • Akrun 的回答有效:) tidyr::fill

标签: r


【解决方案1】:

zoo 包中的na.locf() 函数以相当简单的方式完成此操作。

df$colA <- na.locf(df$colA)

这显然不是一个基本的解决方案,但我一直使用它来处理这样的事情。它还具有处理特殊场景的选项(想要进入其他方向,领先的 NA 等),这些选项在 ?zoo::na.locf()

中进行了讨论

【讨论】:

    【解决方案2】:

    用前面的文本值替换所有NA

    df1$colA <- na.omit(df1$colA)[cumsum(!is.na(df1$colA))]
    
        colA colB colC
    1    pen    2    1
    2    pen  yes   no
    3    pen  yes <NA>
    4 pencil    1    2
    5 pencil  yes   no
    6 pencil   no <NA>
    

    【讨论】:

      猜你喜欢
      • 2021-11-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-01
      • 1970-01-01
      • 2013-05-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多