【问题标题】:How to change two specific groups in data frame in ONE TIME如何一次性更改数据框中的两个特定组
【发布时间】:2023-04-06 10:13:02
【问题描述】:

让我们通过一些观察来考虑数据框。

我们将异常值称为匹配的观察结果

我想用

改变“大异常值”

和“小异常值”

我目前的工作

让我们获取一些随机数据:

set.seed(32)
df1<-data.frame(c(rnorm(20),-100),c(runif(20),-5),c(rexp(20),7))
#Contains one when we have big outlier and 0 if not
big_outlier_frame<-(scale(df1)>3)*1
#Contains one when we have small outlier and 0 if not
small_outlier_frame<-(scale(df1)<(-3))*1

我的想法是将所有大异常值更改为 NA,然后进行替换。

df1[big_outlier_frame==1]<-NA
df1

library(dplyr)
df1 %>% 
  mutate(across(everything(),  function(x)  ifelse(!is.na(x), x,
                                                       2 * sd(x, na.rm = TRUE) + mean(x, na.rm = TRUE))))

之后,我想对小的异常值做类似的思考,但后来我发现了问题。替换大异常值后均值和标准差会发生变化!所以我必须做的是同时改变小和大的,但我不知道怎么做。你能帮我一把吗?

【问题讨论】:

    标签: r dataframe dplyr


    【解决方案1】:

    这是否会返回您的想法:

    library(dplyr)
    df1 %>% mutate_all(
      function(x) ifelse(scale(x) < -3, mean(x) - 3*sd(x), 
                         ifelse(scale(x) > 3, mean(x) + 3*sd(x), x)))
    

    【讨论】:

      猜你喜欢
      • 2017-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-30
      • 1970-01-01
      相关资源
      最近更新 更多