簡體   English   中英

使用 mutate_at 在 R 中輸入多列

[英]Imputing multiple columns in R using mutate_at

我有一個大型醫療數據框,我想用於機器學習。 因此,我必須估算缺失值。 對於連續變量,我想放置中值,如下所示:

dat$First_Wbc <- ifelse(is.na(dat$First_Wbc), median2(dat$First_Wbc), dat$First_Wbc)

我想使用 mutate_at 創建一個代碼,它的作用與我上面提供的代碼相同,但一次用於多個變量。 我知道這是可能的,但到目前為止我還沒有能夠正確地格式化它。 你能幫我么?

注意:median2() 是一個與median() 相同的函數,但它忽略了缺失值

您可以按位置選擇列:

library(dplyr)
df %>% mutate_at(2:4, ~replace(., is.na(.), median2(.)))

或者按列的范圍

df %>% mutate_at(vars(a:d), ~replace(., is.na(.), median2(.)))

或者在列名中使用特定模式。

df %>% mutate_at(vars(starts_with('col')), ~replace(., is.na(.), median2(.)))

基礎 R 解決方案:

dat[,sapply(dat, is.numeric)] <- lapply(dat[,sapply(dat, is.numeric)], 
                                        function(x){
                                         x <- ifelse(is.na(x), median(x, na.rm  = TRUE), x)
                                          }
                                        )

Tidyverse 使用 mutate_if:

library(tidyverse)
df %>% 
  mutate_if(is.numeric, funs(replace(., is.na(.), median(., na.rm = TRUE))))

我們可以將mutate_ifna.aggregate mutate_if使用

library(dplyr)
library(zoo)
df %>% 
   mutate_if(is.numeric, na.aggregate, FUN = median)

說到整潔的解決方案,我真的很喜歡naniar包,它提供了許多處理缺失數據的有用方法。

例如,在這里估算您可以執行的所有數字列中的中位數:

library(tidyverse)
library(naniar)

df %>%
  impute_median_if(is.numeric)

impute_median_all()impute_mean_if()和許多很棒的缺失數據可視化帶來了更多的附加值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM