从数据框中删除最后一个非 NA 值

Remove Last Non-NA Value from Dataframe

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

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

我们可以使用 max.col 找到每行的最后一个非 NA 元素,然后使用 row/column 索引,将这些元素设置为原始数据集中的 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>