gpt4 book ai didi

r - 处理不完整的案例并进行估算?

转载 作者:行者123 更新时间:2023-12-02 08:07:37 27 4
gpt4 key购买 nike

我有一个这样的数据框:

df <- data_frame('col1' = c(NA, 1, 2), 'col2' = c(34, NA, 44), 'indicator' = c(1,1,0))

我已经使用 complete.cases 来标记所有不完整的案例。

现在我想做的是,如果 indicator == 1 则用 10 替换 NA 值,否则每列用 0 替换。

尝试使用 applyMARGIN = 2 来做到这一点。

请告知如何执行此类任务。

最佳答案

我们可以使用 dplyr 中的 mutate_at。在 mutate_atvars 参数中指定感兴趣的列,在 funs 中,使用 case_when 创建逻辑条件替换为满足条件的值

library(dplyr)
df %>%
mutate_at(vars(matches("col\\d+")),
funs(case_when(is.na(.) & as.logical(indicator)~ 10,
is.na(.) & !indicator ~ 0,
TRUE ~ .)))
# A tibble: 3 x 3
# col1 col2 indicator
# <dbl> <dbl> <dbl>
# 1 10 34 1
# 2 1 10 1
# 3 2 44 0

这也可以用data.table来完成

library(data.table)
setDT(df)
for(j in names(df)[1:2]) {
i1 <- is.na(df[[j]])
i2 <- as.logical(df[['indicator']])

set(df, i = which(i1 & i2), j = j, value = 10)
set(df, i = which(i1 & !i2), j = j, value = 0)
}

如果我们想要列的最大值而不是 10 来替换 'indicator' 为 1 的 NA 值,请使用 max

df %>%
mutate_at(vars(matches("col\\d+")),
funs(case_when(is.na(.) & as.logical(indicator)~ max(., na.rm = TRUE),
is.na(.) & !indicator ~ 0,
TRUE ~ .)))
# A tibble: 3 x 3
# col1 col2 indicator
# <dbl> <dbl> <dbl>
#1 2 34 1
#2 1 44 1
#3 2 44 0

关于r - 处理不完整的案例并进行估算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50117846/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com