首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将函数应用于R dataframe的每个组和列

将函数应用于R dataframe的每个组和列
EN

Stack Overflow用户
提问于 2018-08-29 03:01:26
回答 2查看 4K关注 0票数 0

我需要应用这个函数

代码语言:javascript
复制
replace_outliers <- function(column) {
  qnt <- quantile(column, probs=c(.25, .75))
  upper_whisker <- 1.5 * IQR(column)
  clean_data <- column
  clean_data[column > (qnt[2] + upper_whisker)] <- median(column)
  clean_data
}

要获得如下所示的数据集:

代码语言:javascript
复制
  Category       a       b       c
       a       2.0     5.0    -5.0
       a       1.5    10.0    10.0
       b       3.2    14.5   100.2
     ...       ...     ...     ...

我必须将replace_outliers分别应用于每个类别和每个列。如何做到这一点呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-08-29 03:16:04

您可以使用dplyr包。使用group_by对每个类别执行此操作,使用mutate_if将该函数应用于所有数值列

代码语言:javascript
复制
library(dplyr)
df <- read.table(header = TRUE, text = 
                   " Category       a       b       c
       a       2.0     5.0    -5.0
                 a       1.5    10.0    10.0
                 b       3.2    14.5   100.2")
replace_outliers <- function(column) {
  qnt <- quantile(column, probs=c(.25, .75))
  upper_whisker <- 1.5 * IQR(column)
  clean_data <- column
  clean_data[column > (qnt[2] + upper_whisker)] <- median(column)
  clean_data
}

df %>% group_by(Category) %>% 
  mutate_if(is.numeric, replace_outliers)
票数 3
EN

Stack Overflow用户

发布于 2018-08-29 03:16:49

group_by中使用mutate_all

代码语言:javascript
复制
library(dplyr)

DF %>% 
  group_by(Category) %>%
  mutate_all(replace_outliers) %>%
  ungroup
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52064670

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档