Как применить функцию к указанным c столбцам - PullRequest
1 голос
/ 02 августа 2020

У меня есть образец фрейма данных вроде следующего:

well <- c('A1','A2','A3','A4','A5')
area <- c(21000, 23400, 26800,70000,8000)
length <- c(21, 234, 26,70,22)
group<-c('WT','Control','C2','D2','E1')

data <- data.frame(well,area,length,group)

И я хочу применить приведенную ниже функцию для удаления строк с выбросами из фрейма данных:

Outlier <- function(x){
  low <- median(x, na.rm=TRUE)-5*(mad(x)) 
  high <- median(x, na.rm=TRUE)+5*(mad(x))   
  out <- if_else(x > high, NA,ifelse(x < low, low, x)) 
  out }

Как применить эту функцию к фрейму данных, исключая определенные столбцы, например столбец «колодец» и «группа»?

1 Ответ

1 голос
/ 02 августа 2020

Мы можем использовать lapply в base R

data[c('area', 'length')] <- lapply(data[c('area', 'length')], Outlier)

Или с dplyr

library(dplyr) # 1.0.0
data %>% 
     mutate(across(area:length, Outlier))
#    well  area length   group
#1   A1 21000     21      WT
#2   A2 23400     NA Control
#3   A3 26800     26      C2
#4   A4    NA     NA      D2
#5   A5  8000     22      E1

ПРИМЕЧАНИЕ. Обязательно измените NA на NA_real_ в функции «Выбросы»

Outlier <- function(x){
  low <- median(x, na.rm=TRUE)-5*(mad(x)) 
  high <- median(x, na.rm=TRUE)+5*(mad(x))   
  out <- if_else(x > high, NA_real_,ifelse(x < low, low, x)) 
  out }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...