如何在 R 的 For 循环中正确使用 group_by() 和 summarise()

2023-12-21

我正在尝试计算一些摘要信息,以帮助我检查数据集中不同组中的异常值。我可以使用我想要的输出类型dplyr::group_by() and dplyr::summarise()- 包含给定变量的每个组的摘要信息的数据框。像这样的事情:

Sepal.Length_outlier_check <- iris %>%
  dplyr::group_by(Species) %>% 
  dplyr::summarise(min = min(Sepal.Length, na.rm = TRUE),
                   max = max(Sepal.Length, na.rm = TRUE),
                   median = median(Sepal.Length, na.rm = TRUE),
                   MAD = mad(Sepal.Length, na.rm = TRUE),
                   MAD_lowlim = median - (3 * MAD),
                   MAD_highlim = median + (3 * MAD),
                   Outliers_low = any(Sepal.Length < MAD_lowlim, na.rm = TRUE),
                   Outliers_high = any(Sepal.Length > MAD_highlim, na.rm = TRUE)
                   )

Sepal.Length_outlier_check

但是,我希望能够将其放入 For 循环中,以便能够为数据集中的每个不同变量生成类似的摘要数据帧。我是使用循环的新手,但我认为它可能需要看起来像这样:

vars <- list(colnames(iris))

for (i in vars) {

x <- iris %>%
  dplyr::group_by(Species) %>% 
  dplyr::summarise(min = min(i, na.rm = TRUE),
                   max = max(i, na.rm = TRUE),
                   median = median(i, na.rm = TRUE),
                   MAD = mad(i, na.rm = TRUE),
                   MAD_lowlim = median - (3 * MAD),
                   MAD_highlim = median + (3 * MAD),
                   Outliers_low = any(i < MAD_lowlim, na.rm = TRUE),
                   Outliers_high = any(i > MAD_highlim, na.rm = TRUE)
                   )

assign(paste(i, "Outlier_check", sep = "_"), x)

}

我知道这不起作用,因为在摘要函数中i实际上没有引用任何数据。我不确定我需要做什么才能让它发挥作用!我将非常感谢您的帮助,或者任何有关如何更优雅地完成所有这一切的建议。

我不愿意使用 dplyr::summarise_all() 因为它为所有变量输出一个汇总表,并且由于我正在处理的真实数据集有许多变量,因此该汇总表会变得太大而无法轻松查看它。

Thanks.


您还可以编写一个函数,使其更容易、更灵活。使用整洁的评估方法,您可以使用rlang::sym()将字符串转换为变量,然后在里面取消引号summarise() with !!(嘭嘭)。

library(dplyr)

check_outlier <- function(df, .groupvar, .checkvar) {

  .groupvar <- sym(.groupvar)
  .checkvar <- sym(.checkvar)

  df_outlier_check <- df %>%
    dplyr::group_by(!! .groupvar) %>% 
    dplyr::summarise(min = min(!! .checkvar, na.rm = TRUE),
                     max = max(!! .checkvar, na.rm = TRUE),
                     median = median(!! .checkvar, na.rm = TRUE),
                     MAD = mad(!! .checkvar, na.rm = TRUE),
                     MAD_lowlim = median - (3 * MAD),
                     MAD_highlim = median + (3 * MAD),
                     Outliers_low = any(!! .checkvar < MAD_lowlim, na.rm = TRUE),
                     Outliers_high = any(!! .checkvar > MAD_highlim, na.rm = TRUE)
    )

  return(df_outlier_check)

}

# test function
check_outlier(iris, "Species", "Sepal.Length")

#> # A tibble: 3 x 9
#>   Species   min   max median   MAD MAD_lowlim MAD_highlim Outliers_low
#>   <fct>   <dbl> <dbl>  <dbl> <dbl>      <dbl>       <dbl> <lgl>       
#> 1 setosa    4.3   5.8    5   0.297       4.11        5.89 FALSE       
#> 2 versic~   4.9   7      5.9 0.519       4.34        7.46 FALSE       
#> 3 virgin~   4.9   7.9    6.5 0.593       4.72        8.28 FALSE       
#> # ... with 1 more variable: Outliers_high <lgl>

循环遍历所有变量并将结果合并到单个数据框中,使用purrr::map_df()

library(purrr)
vars <- c("Sepal.Length", "Sepal.Width",  "Petal.Length", "Petal.Width")
vars %>% 
  set_names() %>% 
  map_df(~ check_outlier(iris, "Species", .x), .id = 'Variable')

#> # A tibble: 12 x 10
#>    Variable Species   min   max median   MAD MAD_lowlim MAD_highlim
#>    <chr>    <fct>   <dbl> <dbl>  <dbl> <dbl>      <dbl>       <dbl>
#>  1 Sepal.L~ setosa    4.3   5.8   5    0.297      4.11         5.89
#>  2 Sepal.L~ versic~   4.9   7     5.9  0.519      4.34         7.46
#>  3 Sepal.L~ virgin~   4.9   7.9   6.5  0.593      4.72         8.28
#>  4 Sepal.W~ setosa    2.3   4.4   3.4  0.371      2.29         4.51
#>  5 Sepal.W~ versic~   2     3.4   2.8  0.297      1.91         3.69
#>  6 Sepal.W~ virgin~   2.2   3.8   3    0.297      2.11         3.89
#>  7 Petal.L~ setosa    1     1.9   1.5  0.148      1.06         1.94
#>  8 Petal.L~ versic~   3     5.1   4.35 0.519      2.79         5.91
#>  9 Petal.L~ virgin~   4.5   6.9   5.55 0.667      3.55         7.55
#> 10 Petal.W~ setosa    0.1   0.6   0.2  0          0.2          0.2 
#> 11 Petal.W~ versic~   1     1.8   1.3  0.222      0.633        1.97
#> 12 Petal.W~ virgin~   1.4   2.5   2    0.297      1.11         2.89
#> # ... with 2 more variables: Outliers_low <lgl>, Outliers_high <lgl>

Created on 2018-10-20 by the reprex package https://reprex.tidyverse.org (v0.2.1.9000)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 R 的 For 循环中正确使用 group_by() 和 summarise() 的相关文章

  • 从 R 环境中删除对象

    我正在阅读 Hadley 的 Advanced R 在第 8 章中 他说我们可以使用以下方法从环境中删除对象 rm 但是 移除该物体后我仍然可以看到该物体 这是我的代码 e lt new env e a lt 1 e b lt 2 e a
  • 将函数应用于 3d 数组的每一层,返回一个数组

    假设您有一个包含行 列和层的 3 维数组 A lt array 1 27 c 3 3 3 想象你有一个函数 它接受一个矩阵作为输入并返回一个矩阵作为输出 就像t 如何将该函数应用于数组的每一层 返回与第一层大小相同的另一个数组 我觉得我应该
  • 仅保留百分比的尾随零

    给出以下示例 library pander tableAbs lt Titanic 1 1 tablePct lt round prop table tableAbs 100 2 table lt cbind tableAbs tableP
  • glmnet 未从 cv.glmnet 收敛 lambda.min

    我跑了20倍cv glmnet套索模型以获得 lambda 的 最佳 值 但是 当我尝试重现结果时glmnet 我收到一个错误 内容如下 Warning messages 1 from glmnet Fortran code error c
  • R 中的字符串作为函数参数

    数据框chocolates列出了糖果的类型以及每种糖果的一组评级 ID sweetness filling crash snickers 0 67 0 55 0 40 milky way 0 81 0 53 0 56 我正在编写一个函数 它
  • 使用outer代替expand.grid

    我正在寻找尽可能快的速度并留在基地做该做的事expand grid做 我用过outer为过去类似的目的创建一个向量 像这样的东西 v lt outer letters LETTERS paste0 unlist v lower tri v
  • 带 R 的多彩标题

    我想添加颜色某些词在我的图表标题中 我已经能够在这里找到一些先例 http blog revolutionanalytics com 2009 01 multicolor text in r html 具体来说 我希望用撇号括起来的文本 在
  • ggplot散点图中的图例问题

    我想使用 ggplot 创建显示方法比较数据的散点图 绘图应包含原始数据 理想线和带误差的拟合线 图例应显示理想线和拟合线的线型 线宽 线颜色 我可以获得大部分我想要的东西 但是图例存在以下问题 图例显示每种线型有 2 条线 为什么 如何解
  • 循环预定义值

    有没有办法在 oracle 中执行 for every 如下所示 begin for VAR in 1 2 5 loop dbms output put line The value VAR end loop end 我知道你可以这样做 b
  • 为什么 geom_boxplot 比基本箱线图识别更多异常值?

    这是一个可重复的示例 与基本箱线图相比 最后一个治疗组又发现了一个异常值 dta lt structure list Treatment c A A A A A A A A A A A A A A A A B B B B B B B B B
  • GGPLOT2:如何在 ggplot() 脚本中绘制特定选择

    这是一个名为的大型数据集的峰值P 其中有 10 个优惠 CS 有不同的商店 SHP 具有多个数值 数据集列出了按周排序的它们 WK 2 tm 52 它创建一个大文件 仅前 6 行出现峰值 WK MND CS SHP RevCY RevLY
  • 单击 R 中的 Sankey Chart 线时添加额外的标签值

    以下 R 闪亮脚本创建一个桑基图 如下面的快照所示 我的要求是 当我单击左右节点之间的任何链接 即 a1 和 a2 时 我希望相应的 a3 的总和出现在标签中 例如 a1 中的 A 和 a2 中的 E 总共具有值 50 和 32 因此 我想
  • 更改计划的开始日期以优化资源

    我有很多工作需要在特定的时间间隔执行 然而 我们每天完成这项工作的资源有限 因此 我正在尝试优化开始时间日期 开始时间日期只能向前移动 不能向后移动 以便每天使用的资源与我们的预算更加不相似 这些函数在下面的示例中使用 Function t
  • 捕获段错误、内存未映射错误

    我试图在 R 中找到 1347 x 209974 矩阵的列的相关性 每次我这样做 使用一个简单的命令cor matrix 我收到消息 caught segfault address 0xffffffffd058abf8 cause memo
  • r 谷歌搜索结果计数检索[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 用关键字 健康医院 搜索谷歌会返回大约 1 150 000 000 个结果 如何在 R 中以编程方式获得此计数 我见过这个lin ht
  • R - Quantstart:多种股票的测试策略

    我正在使用一些指标构建基本交易策略 我的问题是我希望它在多个股票上运行 而不必指定我想要测试的每个单独的股票 目前我可以使用向量一次获取多个符号 如下所示 Get Shares from Yahoo Finance Stocks lt AS
  • R中将矩阵拆分为子矩阵的函数

    我有一个 16 行 12 列的矩阵 M 我想将其拆分为 16 个矩阵的数组 每个矩阵有 4 行 3 列 我可以通过以下方式手动完成 M matrix sample 0 127 16 12 replace TRUE c 16 12 ma1 M
  • ggplot2 可视化/显示中的地图错误?

    正如您在下面看到的 我使用 ggplots 制作的地图上存在一个奇怪的显示问题 任何投影似乎都会发生同样的问题 这是代码 仅包maps and ggplot2需要 mapWorld lt borders world colour gray5
  • 根据R中的前一行和当前行按组计算

    我可以根据 R 中的前一行和当前行进行计算 对于此数据框 df A B 1 2 2 2 2 3 3 4 5 5 B2 A2 0 5 B1 我可以使用这段代码来计算这个函数 for i in 2 nrow df B i lt 1 2 B i
  • 在 Ubuntu Lucid 中从二进制安装 R 包

    我已经使用以下命令在 Ubuntu Lucid 中安装了 R sudo aptitude 安装 r base 当我尝试 install packages 时 它似乎会下载源代码 然后花费很长时间来编译它 我怎样才能像我在 Windows 上

随机推荐

  • 使用“mysql_fetch_row”从数据库检索结果并使用 PHP 和 mysqli 插入数组?

    我需要从几行检索数据 然后将结果插入到枚举数组中 这样我就可以使用 for 循环来回显它 我有这个 我已经连接到数据库 genres sql SELECT genreID FROM genres WHERE imdbID if stmt g
  • 如何基于Web服务更改android中的语言

    目前 我正在开发我正在使用的 Android 项目English作为主要语言 我在用着strings xml字符串常量文件 现在 我想根据网络服务动态更改语言 该服务将根据用户选择 在 设置 中 创建 我知道我们必须为每种语言创建单独的 s
  • 如何最好地设计具有多个过滤器的 REST API?

    作为一个个人编程项目 我正在抓取我大学的课程目录并以 REST API 的形式提供数据 我已成功抓取所有数据并将其存储在数据库中 现在正在开发 API 课程可以根据许多标准进行过滤 教师 学院 学分 时间 日期等 在这种情况下提供 API
  • 微风错误:非法构造 - 使用“或”组合检查

    我遇到了这个微风错误 非法构造 使用 或 来组合检查 在 Chrome 上加载实体的编辑页面时 当我刷新页面时 错误消息不再出现 此错误在我的网站上随机 不规则地发生 我无法使用指定的场景重现它 只是随机遇到它 我在 Breeze 代码中看
  • Nuxt中间件无限重定向问题

    您好 我正在尝试在我的 Nuxt 3 应用程序中执行这个中间件 我正在尝试遵循文档 但收到无限重定向错误 export default defineNuxtRouteMiddleware to from gt const user id 1
  • python TypeError:“列表”对象不可调用错误

    我是 python 新手 我试图理解这里的一个基本错误 我在下面的代码中收到 TypeError list object is not callable 错误 有人可以解释一下我的代码有什么问题吗 graph a b c b a c c b
  • 通过 AKS 群集中的负载均衡器访问服务

    我配置了一个集群 其中的服务 及其相关的 Pod 容器 全部部署到私有子网中 其中一个 Pod 代表应用程序的 UI 我定义了一个具有公共 IP 的负载均衡器来提供对 UI 的访问 至少这是我的意图 当我在浏览器中输入包含负载均衡器 IP
  • Angular Js+ TypeScript:如何创建动态表

    我是打字稿和角度的新手 我已经使用打字稿和角度js实现了一个模块 在其中我需要创建一个动态表 它将获取演示文稿的类型并相应地附加到我的视图 就像我之前在 C 中所做的那样 我在下面给出了我的 c 代码 private void ShowCu
  • 需要均匀分布的按钮行

    我尝试使用 3 行和 4 列将所有按钮水平均匀地隔开 但失败了 垂直的就好 下面是 3 种不同的按钮间隔尝试 我的 3 行每行 1 种 第一行拉伸图形 这是不需要的 第二行不拉伸但没有间距 图形之间需要间距 而第三行拉伸没有任何间距 请帮我
  • 使用 IoC 进行单元测试

    如何使用 IoC 容器进行单元测试 使用 IoC 管理大型解决方案 50 多个项目 中的模拟是否有用 有什么经验吗 有哪些 C 库适合在单元测试中使用它 一般来说 单元测试不需要 DI 容器 因为单元测试就是分离职责 考虑一个使用构造函数注
  • Mongoose 在启动时调用 EnsureIndex,但不建议这样做。那么为什么它是默认的呢?

    我无法理解一件事 当我们读到猫鼬文档 http mongoosejs com docs guide html 当您的应用程序启动时 Mongoose 会自动调用ensureIndex对于架构中每个定义的索引 虽然有利于开发 但建议在生产中禁
  • 获取 Windows 中本地计算机用户名列表

    如何使用 C 获取 Windows 中本地计算机用户名列表 using System Management SelectQuery query new SelectQuery Win32 UserAccount ManagementObje
  • ggplot2直方图中每个方面的不同断点

    一个 ggplot2 挑战的 latticist 需要帮助 在直方图中请求变量每面中断的语法是什么 library ggplot2 d data frame x c rnorm 100 10 0 1 rnorm 100 20 0 1 par
  • 基本教师登录的用例图

    我正在创建一个非常基本的用例图来显示教师登录 该登录包括一个忘记密码 如果用户忘记密码 和一个重置密码 如果他们希望在登录后重置密码 我的问题是以下用例图表创建 尤其是包含和扩展 这确实是非常基本的 通常 登录宁愿成为其他用例的先决条件 而
  • 通过 C# 和 SMO 检查并删除现有表

    我正在尝试按名称查找 SQL 表 如果存在则删除它 这一切都需要使用 SMO 在 C 中完成 更复杂的是 该表还有一个 dbo 以外的模式 最终该表将通过 SMO 创建 我可以正常工作 但我必须确保它不存在 然后才能重新创建它 我看到的所有
  • 如何尽可能高效地将存储在 RDD 列中的多个 json 表“缩减”为单个 RDD 表

    使用以下代码在数据帧中使用联合来并发访问附加行是否可以正常工作 目前显示类型错误 from pyspark sql types import schema StructType StructField owreg StringType Tr
  • Laravel 'like' 查询与 MongoDB 连接

    我在 laravel like 查询中遇到问题 我在 laravel 上有一个 MIS 数据库在 MongoDb 上 现在我的数据库有一个名为kw带有 urlencoded 关键字 例如cars 20in 20London 现在我的查询给出
  • pandas 处理 numpy timedelta64[ms]

    gt gt gt import pandas as pd gt gt gt pd version 0 11 0 gt gt gt import numpy as np gt gt gt np version 1 7 1 gt gt gt d
  • 如何从Scala中的资源文件夹中读取文件?

    我有一个如下所示的文件夹结构 main java resources scalaresources commandFiles 在该文件夹中我有我必须阅读的文件 这是代码 def readData runtype String snmphos
  • 如何在 R 的 For 循环中正确使用 group_by() 和 summarise()

    我正在尝试计算一些摘要信息 以帮助我检查数据集中不同组中的异常值 我可以使用我想要的输出类型dplyr group by and dplyr summarise 包含给定变量的每个组的摘要信息的数据框 像这样的事情 Sepal Length