处理同一日期出现的值

Dealing with values that occur on the same date

如何查找同一数据框中两个不同列之间同一日期出现的值。删除 A01_CD 列中出现的值并将其替换为 NA。在 A01_CD 有值的情况下,应将其移动到 A01 并将 NA 放在 A01 中。我一直在尝试使用 duplicate () 和 Unique () 以及 ifelse,但我失败了。请协助。

我的数据框

    Date         A01        A01_CD
1   1966/05/07  4.870000    4.870
2   1966/05/08  4.918333    NA
3   1966/05/09  4.892000    4.860
4   1966/05/10  4.858917    NA
5   1966/05/11  4.842000    NA
211 1967/03/18  NA          5.95

期望的结果

    Date         A01        A01_CD
1   1966/05/07  4.870000    NA
2   1966/05/08  4.918333    NA
3   1966/05/09  4.892000    NA
4   1966/05/10  4.858917    NA
5   1966/05/11  4.842000    NA
211 1967/03/18  5.95        NA

带有 coalesce 的选项将 return 跨不同列的第一个 non-NA 元素作为每行的参数给出

library(dplyr)
df1 %>%
   transmute(Date, A01 = coalesce(A01, A01_CD), A01_CD = NA_real_)
#       Date      A01 A01_CD
#1 1966/05/07 4.870000     NA
#2 1966/05/08 4.918333     NA
#3 1966/05/09 4.892000     NA
#4 1966/05/10 4.858917     NA
#5 1966/05/11 4.842000     NA
#6 1967/03/18 5.950000     NA

或在 base R 中使用 row/column 索引

df1$A01 <- df1[-1][cbind(seq_len(nrow(df1)), max.col(!is.na(df1[-1]), 'first'))]
df1$A01
#[1] 4.870000 4.918333 4.892000 4.858917 4.842000 5.950000

数据

df1 <- structure(list(Date = c("1966/05/07", "1966/05/08", "1966/05/09", 
"1966/05/10", "1966/05/11", "1967/03/18"), A01 = c(4.87, 4.918333, 
4.892, 4.858917, 4.842, NA), A01_CD = c(4.87, NA, 4.86, NA, NA, 
5.95)), class = "data.frame", row.names = c("1", "2", "3", "4", 
"5", "211"))
DF <- DF %>% mutate(A01 = ifelse(is.na(A01), A01_CD, A01),
                    A01_CD =NA)

这也有帮助。 我需要 NA 列只是为了跟踪我想做的事情是否正在发生。