从Dataframe中删除最后一个非NA值

时间:2017-03-25 14:23:05

标签: r replace na

我有一个如下所示的数据框:

Col1    Col2    Col3     Col4   Col5     Col6     Col7
  10       A       B        C     NA       NA       NA
  12       B       P        V      G       NA       NA
  14       C       I        K      H        M        H
  55       N       K       NA     NA       NA       NA
  34       M       N        O      P        Q       NA

如何删除每行中的最后一个非NA值并替换为NA?

最终输出:

Col1    Col2    Col3     Col4   Col5     Col6     Col7
  10       A       B       NA     NA       NA       NA
  12       B       P        V     NA       NA       NA
  14       C       I        K      H        M       NA
  55       N      NA       NA     NA       NA       NA
  34       M       N        O      P       NA       NA

1 个答案:

答案 0 :(得分:3)

我们可以使用max.col找到每行的最后一个非NA元素,然后使用行/列索引,在原始数据集中将这些元素设置为NA

df1[cbind(1:nrow(df1), max.col(!is.na(df1), 'last'))] <- NA
df1
#   Col1 Col2 Col3 Col4 Col5 Col6 Col7
#1   10    A    B <NA> <NA> <NA> <NA>
#2   12    B    P    V <NA> <NA> <NA>
#3   14    C    I    K    H    M <NA>
#4   55    N <NA> <NA> <NA> <NA> <NA>
#5   34    M    N    O    P <NA> <NA>