处理同一日期出现的值
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 列只是为了跟踪我想做的事情是否正在发生。
如何查找同一数据框中两个不同列之间同一日期出现的值。删除 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 列只是为了跟踪我想做的事情是否正在发生。