将 df 拆分为多列的 **tidyverse** 方法是什么?

2024-06-25

我想将数据框分成多列,以便我可以看到summary()数据每个子集的输出。

这是一种使用方法来做到这一点split() from base:

library(tidyverse)
#> Loading tidyverse: ggplot2
#> Loading tidyverse: tibble
#> Loading tidyverse: tidyr
#> Loading tidyverse: readr
#> Loading tidyverse: purrr
#> Loading tidyverse: dplyr
#> Conflicts with tidy packages ----------------------------------------------
#> filter(): dplyr, stats
#> lag():    dplyr, stats

mtcars %>% 
  select(1:3) %>% 
  mutate(GRP_A = sample(LETTERS[1:2], n(), replace = TRUE),
         GRP_B = sample(c(1:2), n(), replace = TRUE)) %>% 
  split(list(.$GRP_A, .$GRP_B)) %>% 
  map(summary)
#> $A.1
#>       mpg             cyl           disp          GRP_A          
#>  Min.   :10.40   Min.   :4.0   Min.   :108.0   Length:10         
#>  1st Qu.:14.97   1st Qu.:4.5   1st Qu.:151.9   Class :character  
#>  Median :18.50   Median :7.0   Median :259.3   Mode  :character  
#>  Mean   :17.61   Mean   :6.4   Mean   :283.4                     
#>  3rd Qu.:20.85   3rd Qu.:8.0   3rd Qu.:430.0                     
#>  Max.   :24.40   Max.   :8.0   Max.   :472.0                     
#>      GRP_B  
#>  Min.   :1  
#>  1st Qu.:1  
#>  Median :1  
#>  Mean   :1  
#>  3rd Qu.:1  
#>  Max.   :1  
#> 
#> $B.1
#>       mpg             cyl           disp          GRP_A          
#>  Min.   :15.00   Min.   :4.0   Min.   : 75.7   Length:5          
#>  1st Qu.:21.00   1st Qu.:4.0   1st Qu.: 78.7   Class :character  
#>  Median :21.50   Median :4.0   Median :120.1   Mode  :character  
#>  Mean   :24.06   Mean   :5.2   Mean   :147.1                     
#>  3rd Qu.:30.40   3rd Qu.:6.0   3rd Qu.:160.0                     
#>  Max.   :32.40   Max.   :8.0   Max.   :301.0                     
#>      GRP_B  
#>  Min.   :1  
#>  1st Qu.:1  
#>  Median :1  
#>  Mean   :1  
#>  3rd Qu.:1  
#>  Max.   :1  
#> 
#> $A.2
#>       mpg             cyl             disp          GRP_A          
#>  Min.   :15.20   Min.   :4.000   Min.   : 95.1   Length:9          
#>  1st Qu.:16.40   1st Qu.:6.000   1st Qu.:160.0   Class :character  
#>  Median :18.10   Median :8.000   Median :275.8   Mode  :character  
#>  Mean   :19.84   Mean   :6.667   Mean   :234.0                     
#>  3rd Qu.:21.00   3rd Qu.:8.000   3rd Qu.:275.8                     
#>  Max.   :30.40   Max.   :8.000   Max.   :360.0                     
#>      GRP_B  
#>  Min.   :2  
#>  1st Qu.:2  
#>  Median :2  
#>  Mean   :2  
#>  3rd Qu.:2  
#>  Max.   :2  
#> 
#> $B.2
#>       mpg             cyl         disp          GRP_A          
#>  Min.   :13.30   Min.   :4   Min.   : 71.1   Length:8          
#>  1st Qu.:14.97   1st Qu.:4   1st Qu.:125.3   Class :character  
#>  Median :20.55   Median :6   Median :201.5   Mode  :character  
#>  Mean   :20.99   Mean   :6   Mean   :213.5                     
#>  3rd Qu.:23.93   3rd Qu.:8   3rd Qu.:315.5                     
#>  Max.   :33.90   Max.   :8   Max.   :360.0                     
#>      GRP_B  
#>  Min.   :2  
#>  1st Qu.:2  
#>  Median :2  
#>  Mean   :2  
#>  3rd Qu.:2  
#>  Max.   :2

我怎样才能达到同样的结果使用tidyverse动词?我最初的想法是使用purrr::by_slice(),但显然这已被弃用。


dplyr 0.8.0 引入了您正在寻找的动词:group_split()

从文档中:

group_split() 的工作方式类似于base::split() but

  • 它使用 group_by() 中的分组结构,因此受数据掩码的约束

  • 它不会根据分组命名列表的元素,因为这通常会丢失信息并且令人困惑。

group_keys()通过返回数据解释分组结构 每组一行、每个分组变量一列的框架。

对于你的例子:

mtcars %>% 
  select(1:3) %>% 
  mutate(GRP_A = sample(LETTERS[1:2], n(), replace = TRUE),
         GRP_B = sample(c(1:2), n(), replace = TRUE)) %>% 
  group_split(GRP_A, GRP_B) %>% 
  map(summary)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 df 拆分为多列的 **tidyverse** 方法是什么? 的相关文章

  • R 中的频率加权,与 Stata 的结果比较

    我正在尝试分析明尼苏达大学 IPUMS 数据集中的数据1990 年美国人口普查 http usa ipums org usa sampdesc shtml us1990a in R 我正在使用survey http faculty wash
  • 如何将带有几行代码的字符数组转换为 data.frame?

    我有以下数组 my list lt c Jan 01 Dec 31 00 00 24 00 Jan 01 Jun 30 12 00 18 00 Jul 06 Dec 31 09 00 19 00 导致以下结果的最短代码是什么 x1 x2 x
  • 使用 ggplot2 在一张画布上绘制多个图形[重复]

    这个问题在这里已经有答案了 我正在尝试根据此表将两个 ggplot2 图合并为一个图 Type RatingA RatingB 1 One 3 36 2 Two 5 53 3 One 5 57 4 One 7 74 5 Three 4 38
  • 如何在R中用采样字符替换通配符

    我有以下顺序 s0 lt KDRH THLA RT HLAK 那里的通配符字符由 我想要做的是用该向量中的采样字符替换该字符 AADict lt c A R N D C E Q G H I L K M F P S T W Y V Since
  • 使用 dplyr 进行括号转义的表名称

    我正在以编程方式获取一堆数据集 其中许多数据集都有以数字开头的愚蠢名称 并且其中包含特殊字符 例如减号 因为没有一个数据集特别大 而且我希望 R 能够对数据类型做出最好的猜测 所以我使用 dplyr 将这些表转储到 SQLite 中 我使用
  • 将鼠标悬停在 ggplot 上时更新 CSS 和渲染工具提示以错误的顺序发生

    我在这里构建了一个虚拟应用程序 它为 ggplot 生成悬停消息 并确保它们保持在屏幕边界内 我编写了一些计算来确定所需的 CSS 更正并将其发送到服务器 它基于将悬停消息保留在此处的第一次尝试 SO问题 https stackoverfl
  • strsplit 与 gregexpr 不一致

    一条评论 https stackoverflow com questions 23961022 split strings on first and last commas 23964843 noredirect 1 comment3692
  • 使用 dplyr::mutate 重新编码而不在函数中工作

    我正在尝试使用dplyr mutate across 重新编码 a 中的指定列tbl 单独使用它们效果很好 但我无法让它们在函数中工作 library dplyr library tidyr df1 lt tibble Q7 1 1 5 Q
  • 库存推文、文本挖掘、表情符号错误

    我希望您能够协助进行文本挖掘练习 我对 AAPL 推文感兴趣 并且能够从 API 中提取 500 条推文 我自己克服了几个障碍 但最后一部分需要帮助 由于某种原因 tm 包没有删除停用词 您能看一下可能是什么问题吗 表情符号会引起问题吗 绘
  • 从 r 中的数据帧中删除每第 n 列

    我试图通过删除每第三列来减小数据框的大小 这是我的示例数据框 example data frame x c 1 2 3 4 y c 1 2 3 4 z c 1 2 3 4 w c 1 2 3 4 p c 1 2 3 4 q c 1 2 3
  • R 中二维核密度估计的混乱

    核密度估计器用于估计特定的概率密度函数 参见mvstat net http www mvstat net tduong research seminars seminar 2001 05 and scikit learn 文档 http s
  • 如何使用 R 获取所有 S&P500 公司代码列表?

    我想在R中制作FOR语句来一次性分析股票数据 但我不知道如何获得 S P 公司代码列表 请让我知道解决方案 谢谢 library rpart library rpart plot library quantmod startDate as
  • 将数据帧的每一列乘以向量的相应值[重复]

    这个问题在这里已经有答案了 我有以下数据框和向量 dframe lt as data frame matrix 1 9 3 vector lt c 2 3 4 我想将每一列相乘dframe通过相应的值vector 这不会做 gt vecto
  • 如何在闪亮的应用程序中初始化渲染项目的默认值

    介绍 In a shinyApp 我想用动态输入渲染输出 我的问题是 使用shinydashboard使用不同的选项卡 默认值来自 Input 仅当激活相应选项卡时才会呈现 想想输入和输出选项卡 当使用时我得到同样的行为switch声明in
  • 如何计算两个邮政编码之间的距离?

    我有一个美国邮政编码列表 我必须计算所有邮政编码点之间的距离 它是一个 6k 邮政编码长列表 每个实体都有邮政编码 城市 州 纬度 经度 面积和人口 所以 我必须计算所有点之间的距离 即 6000C2 组合 这是我的数据示例 我已经在 SA
  • 使用 R 并行处理 XML 节点

    我正在尝试与 R 并行处理 XML 文档xml2包装和foreach功能 但我收到 node attrs x node nsMap ns 中的错误 外部指针无效 尝试导出树集群导出 示例代码 library xml2 library for
  • R 数据框中的重复行

    我正在尝试使用下面的代码复制数据框中的行 但是 我发现它很慢 duprow df 1 for i in 1 2000 print i df rbind df duprow 有更快的方法吗 您可以使用rep 例如对于数据框第 1 行的 5 个
  • 没有适用于“filter_”的方法应用于类“c('double', 'numeric')”的对象

    使用下面的代码 我尝试过滤我的数据集 以便仅选择 CG less14 0 和 CG High14 0 的数据集 我收到错误 没有适用于 filter 的方法应用于 c double numeric 类的对象 我的代码有问题吗 married
  • R 矩阵到犰狳的转换非常慢

    观察 对于中等大小的矩阵 将矩阵从 R 传递到 C 的开销要慢得多arma mat类型比NumericMatrix类型 大约需要 250 倍的时间 这是一个最小的例子 include
  • 为什么 NaN^0 == 1

    受到早期高尔夫代码的提示 为什么会 gt NaN 0 1 1 这非常有道理NA 0为 1 因为NA缺少数据 并且any数字提高到 0 将得到 1 包括 Inf and Inf 然而NaN应该代表非数字 那么为什么会这样呢 当帮助页面出现时

随机推荐