使用 dplyr 进行汇总并保持相同的变量名

2024-04-01

我发现 data.table 和 dplyr 在尝试做同样的事情时有不同的结果。我想使用 dplyr 语法,但让它以 data.table 的方式进行计算。用例是我想将小计添加到表中。为此,我需要对每个变量进行一些聚合,但然后保留相同的变量名称(在转换后的版本中)。 Data.table 允许我对变量执行一些聚合并保持相同的名称。然后使用同一变量进行另一个聚合。它将继续使用未转换的版本。然而,Dplyr 将使用转换后的版本。

In the 总结文档说:

# Note that with data frames, newly created summaries immediately
# overwrite existing variables
mtcars %>%
  group_by(cyl) %>%
  summarise(disp = mean(disp), sd = sd(disp))

这基本上是我遇到的问题,但我想知道是否有一个好的解决方法。我发现的一件事是将转换后的变量命名为其他名称rename最后,但这对我来说看起来不太好。如果有一种很好的方法来进行小计,那么也很高兴知道。我浏览了这个网站,没有看到讨论的具体情况。任何帮助将不胜感激!

这里我做了一个简单的例子,一次使用 data.table 的结果,一次使用 dplyr 的结果。我想采用这个简单的表格并附加一个小计行,它是感兴趣的列(总计)的加权平均值。

library(data.table)
library(dplyr)

dt <- data.table(Group = LETTERS[1:5],
                 Count = c(1000, 1500, 1200, 2000, 5000),
                 Total = c(50, 300, 600, 400, 1000))
dt[, Count_Dist := Count/sum(Count)]
dt[, .(Count_Dist = sum(Count_Dist), Weighted_Total = sum(Count_Dist*Total))]

dt <- rbind(dt[, .(Group, Count_Dist, Total)],
      dt[, .(Group = "All", Count_Dist = sum(Count_Dist), Total = sum(Count_Dist*Total))])
setnames(dt, "Total", "Weighted_Avg_Total")

dt

df <- data.frame(Group = LETTERS[1:5],
                 Count = c(1000, 1500, 1200, 2000, 5000),
                 Total = c(50, 300, 600, 400, 1000))

df %>%
  mutate(Count_Dist = Count/sum(Count)) %>%
  summarize(Count_Dist = sum(Count_Dist),
            Weighted_Total = sum(Count_Dist*Total))

df %>% 
  mutate(Count_Dist = Count/sum(Count)) %>%
  select(Group, Count_Dist, Total) %>% 
  rbind(df %>%
          mutate(Count_Dist = Count/sum(Count)) %>%
          summarize(Group = "All",
                    Count_Dist = sum(Count_Dist),
                    Total = sum(Count_Dist*Total))) %>% 
  rename(Weighted_Avg_Total = Total)

再次感谢任何帮助!


一个可能的解决方案是跳过mutate步骤及使用transmute为了第一mutate/select-step并直接从原始变量计算所需的变量,而无需为第二个变量创建中间变量mutate-step:

df %>% 
  transmute(Group, Count_Dist = Count/sum(Count), Weighted_Avg_Total = Total) %>% 
  bind_rows(df %>%
              summarize(Group = "All",
                        Count_Dist = sum(Count/sum(Count)),
                        Weighted_Avg_Total = sum((Count/sum(Count))*Total)))

这使:

  Group Count_Dist Weighted_Avg_Total
1     A 0.09345794            50.0000
2     B 0.14018692           300.0000
3     C 0.11214953           600.0000
4     D 0.18691589           400.0000
5     E 0.46728972          1000.0000
6   All 1.00000000           656.0748

另一种可能的解决方案是改变新变量的计算顺序dplyr然后使用select使列顺序恢复为您最初想要的:

df %>% 
  mutate(Count_Dist = Count/sum(Count)) %>%
  select(Group, Count_Dist, Weighted_Avg_Total = Total) %>% 
  bind_rows(df %>%
              mutate(Count_Dist = Count/sum(Count)) %>%
              summarize(Group = "All",
                        Weighted_Avg_Total = sum(Count_Dist*Total),
                        Count_Dist = sum(Count_Dist)) %>% 
              select(Group, Count_Dist, Weighted_Avg_Total))

如果您想包括Count-column ,你也可以这样做(基于我下面的评论):

df %>% 
  transmute(Group = Group, Count_Dist = Count/sum(Count), Weighted_Avg_Total = Total, Count) %>% 
  bind_rows(df %>%
              summarize(Group = "All",
                        Count_Dist = sum(Count/sum(Count)),
                        Weighted_Avg_Total = sum((Count/sum(Count))*Total),
                        Count = sum(Count)))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 dplyr 进行汇总并保持相同的变量名 的相关文章

  • dplyr 总结小计

    Excel 中数据透视表的一大优点是它们会自动提供小计 首先 我想知道 dplyr 中是否已经创建了任何可以实现此目的的东西 如果没有 实现它的最简单方法是什么 在下面的示例中 我按气缸和化油器的数量显示了平均排量 对于每组气缸 4 6 8
  • SQL Server RODBC 连接

    有没有人有使用 RODBC 并连接到 MS SQL Server 2005 或 2008 的连接字符串示例 谢谢 library RODBC dbhandle lt odbcDriverConnect driver SQL Server s
  • R tm 包创建 N 个最常见术语的矩阵

    我有一个termDocumentMatrix使用创建的tmR 中的包 我正在尝试创建一个包含 50 个最常出现的术语的矩阵 数据框 当我尝试转换为矩阵时 出现此错误 gt ap m lt as matrix mydata dtm Error
  • 在 R 中捕获段错误

    我得到了caught segfault每次我尝试从以下位置运行任何绘图函数时都会出错ggplot2包 1 0 0 我已经尝试过这个qplot geom dotplot geom histogram等来自包的数据 例如diamonds or
  • 读取多个 CSV 文件,并在文件开头跳过不同行数

    我必须阅读大约 300 个单独的 CSV 我已经成功使用循环和结构化 CSV 名称来自动化该过程 然而 每个 CSV 在开头都有 14 17 行垃圾 并且随机变化 因此在 read table 命令中硬编码 skip 参数将不起作用 每个
  • 如何在 R 中创建循环来生成随机样本列表?

    我正在尝试创建一个循环来创建一系列包含随机样本的对象 如下所示 sample lt ceiling runif 9 min 0 max 20 这是圆形制服的示例 但它可以替换为普通 泊松或任何您想要的 因此 我构建了一个循环来自动生成各种生
  • data.table:从不存在的列到现有列的“get”失败,静默失败

    gt d lt data table x 1 5 gt d x 6 y get i 9 Error in get i 9 object i 9 not found gt d y 1 add a new column y gt d x 6 y
  • 通过 rpy 将 SPSS 文件(.sav)导入 pandas 时如何保留标签?

    我正在寻找使用 SPSS 文件 sav pandas 在没有 SPSS 程序的情况下 典型文件转换为 csv 后的样子如下 在调查前两行的含义时 我不知道 SPSS 似乎第一行包含Labels 而第二行包含VarNames 当我将文件带入
  • 矩阵中两个字符串的最大 nchar

    我想找到更好的方法来找到我正在相互比较的两个字符串的更大的 nchar 假设我有字符串句子匹配data frame 和我需要创建一个 max nchar string1 nchar string2 矩阵 但没有 for 循环 这是非常慢的方
  • 准备编程竞赛的缩写和函数[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 使用 ape 包在 R 中进行标签和色叶树状图(系统发育)

    继上一篇文章之后 r 中的标签和彩色叶树状图 https stackoverflow com questions 18802519 label and color leaf dendrogram in r 我有一个后续问题 我的问题与提到的
  • 如何使用 ggplot2 绘制 NA 间隙

    在 R 的基本绘图中 如果数据系列 ggplot2 中存在 NA 则会绘制间隙 举个例子看看 df data frame x c 1 10 y c 1 10 df 5 7 NA plot df type l 但是 ggplot2 删除了缺失
  • 指定生存图的自定义时间点

    我正在努力使用以下方法创建生存 累积事件图ggsurvplot函数从survminer包裹 我想为我的绘图指定自定义时间点 但我不知道该怎么做 这xlim and break x by参数有点帮助 但它们创建了均匀间隔的时间点和比我想要的更
  • 如何在 R 中绘制预测的子集?

    我有一个简单的 R 脚本来根据文件创建预测 自 2014 年以来就有数据记录 但我在尝试实现以下两个目标时遇到了困难 仅绘制预测信息的子集 从 11 2017 开始 以特定格式包含月份和年份 即 6 月 17 日 这是链接到dataset
  • 获取行名以 ABC111 开头的所有行

    我们有以下数据框 col1 col2 col3 ABC111001 12 12 13 ABC111002 3 4 5 ABC000111 7 6 1 ABC000112 9 23 1 如何获取行名以 开头的所有行ABC111 如下 ABC1
  • 如何在 rmarkdown 中显示带有 results='asis' 的格式化 R 输出

    当使用 results asis 时 有没有办法在 rmarkdown knitr 中显示格式化程序 R 输出 一个例子是以下函数 myfun lt function cat hello n cat c one 1 two 2 然后 该块将
  • 双向条形图,两侧带有正标签ggplot2

    我尝试在 ggplot 中创建一个双向条形图 其中轴上方和下方的轴标签和数据标签均为正值 例如 如果您的数据是 myData lt data frame category c yes yes no no month c Jan Feb Ja
  • 液体字符串中的转义字符

    我正在尝试将包含各种尺寸的标签列表放在一起 在 Shopify 中使用 Liquid 尺寸使用单引号和双引号表示英寸和英尺 因为它同时使用两者 所以会导致字符串正确关闭的问题 我尝试过使用标准转义字符 但这似乎不起作用 是否可以在 Liqu
  • 替换向量中非 %in% 向量的值

    简短的问题 我可以像这样替换某些变量值 values lt c a b a b c a b df lt data frame values 将 df values 的所有值替换为 x 其中值是neither a 或 b 输出应该是 c a
  • R data.table fread 使用不带标题的命名 colClasses(例如没有 col.names?)

    更新 2016 年 6 月 col names 已添加到 data table 1 9 6 所以问题已经结束 每个人都非常高兴 我想我现在可以将所有 read csv 调用转换为 fread 调用 而不必担心破坏 原问题 使用数据表1 9

随机推荐

  • 将 2D Numpy 灰度值数组转换为 PIL 图像

    假设我有一个 2D Numpy 数组 其值范围在 0 到 1 之间 它表示灰度图像 然后如何将其转换为 PIL Image 对象 迄今为止的所有尝试都产生了极其奇怪的分散像素或黑色图像 for x in range image shape
  • 在 Windows Phone 7 中使用 RestSharp

    我正在尝试使用 RestSharp http restsharp org http restsharp org 在 Windows Phone 7 项目中 但我似乎遇到了 RestSharp 使用的 Newtonsoft Json NET
  • 如何从 Visual Studio 2013 中禁用 mscorlib.dll?

    我正在尝试在 Visual Studio 2013 中使用自定义标准库 但似乎无法弄清楚 尽管我希望能够在 IDE 中利用智能感知 但使用 nostdlib 在命令行上进行编译没有任何问题 我已删除除自定义 corelib 之外的所有引用
  • ElasticSearch非法参数异常

    我在 Ubuntu 16 04 上使用 Elasticsearch 最新版本 但在将数据放入其中时遇到了一些问题 这是我的 json 文档 相关部分 products 232CDFDW89ENUXRB sku 232CDFDW89ENUXR
  • 无法通过实例引用访问成员;用类型名称限定它[重复]

    这个问题在这里已经有答案了 今天我正在研究 c Sharp 正在尝试静态类 但它似乎对我不起作用 我很想知道解决方案 我已经在网上浏览了一段时间 但似乎找不到答案 这是我的代码 class Count public static int s
  • CLISP - 反转简单列表

    我必须反转简单 单维 列表的元素 我知道有一个内置的反向函数 但我不能用它来做这个 这是我的尝试 defun LISTREVERSE LISTR cond lt length LISTR 2 LISTR listr is 1 atom or
  • OrderBy Linq 的奇怪行为

    我有一个使用以下命令排序的列表OrderBy Linq 函数 返回一个IOrderedEnumerable var testList myList OrderBy obj gt obj ParamName ParamName 是一个可以保存
  • 如何在 C# 中运行时检查类型的可分配性?

    The Type类有一个方法IsAssignableFrom 这几乎有效 不幸的是 只有当两种类型相同或者第一个类型位于第二个类型的层次结构中时 它才会返回 true 它说decimal不可分配自int 但我想要一种方法来表明decimal
  • 前向声明会产生不兼容的类型错误

    我一直在阅读一些有关前瞻性声明的文章 包括在这个论坛上 他们都说它可以让我们免于包含头文件 但是以下代码会生成错误 ifndef CLASSA H define CLASSA H class B class A public A A int
  • 有没有办法在 protobuf (proto2) 中创建类型别名?

    是否可以创建 protobuf 标量类型的别名 例如 我想使用Sequence替代string 即使它们是二进制等价的 我的近期目标是使文档 使用 protoc gen doc 生成 更容易理解 理想情况下 这种类型应该用支持类型检查的语言
  • Postgresql:无法访问文件“$libdir/postgis-2.1”没有这样的文件或目录

    我想这是一个已知问题 但由于我使用了删除 postgresql 9 4 postgis 2 1 的脚本 所以我现在无法在 Debian 下消除此 SQL 错误 无法访问文件 libdir postgis 2 1 没有这样的文件或目录 我做了
  • 当我尝试转换我的应用程序时,DesktopAppConverter (DAC) 表示扩展的图像无效

    我已经下载了与我的 Windows 版本 14393 匹配的 wim 文件 并完成了设置转换器的过程 所以 我的机器上运行了转换器应用程序 当我尝试运行转换时 收到错误消息 E EXPANDED BASEIMG INVALID 我尝试通过使
  • Git子树合并策略,可以不合并历史记录吗?

    我一直在尝试摆脱子模块以获得独立的存储库 并且子树合并策略 http help github com subtree merge 似乎符合这个用例 然而 合并的存储库的历史出现在我自己的项目的历史中 这相当烦人 我试过了git filter
  • Vue.js 依赖选择

    我正处于学习 Vue js 的初级阶段 遇到了我现在无法解决的问题 所以我有 1 个选择字段 data list Option 1 size 1 prize 5 size 2 prize 10 然后我像这样填充第一个选择字段
  • WAMPServer 3.2.0:无法访问该站点

    我一直在使用 WAMPServer 来运行 PHP 并且为此使用端口 8181 今天 突然 我无法使用 WAMPServer 访问 localhost 当我尝试打开以下地址的页面时收到此消息 http localhost 8181 无法访问
  • 为什么 Rails 找不到我的资产?

    在生产模式下 rails 似乎无法从资产管道中找到任何预编译资产 我使用的是在 CentOS 上的 RVM 内运行的 Rails 3 2 0 和 ruby 1 9 3 没有其他 Web 服务器与此应用程序一起运行 该应用程序最近才更新为使用
  • 如何在react-dnd-treeview库上使用Selenium测试拖放

    我正在尝试在 React 应用程序上测试简单的拖放行为 我正在使用反应 dnd 树视图 https github com teleport react dnd treeview图书馆和他们的示例网站 http teleport github
  • PHP - 自我表单提交:$_SERVER['PHP_SELF'] OR action=""?

    我只是意识到 在一些奇怪的情况下 我正在做我认为是自我提交的事情 而没有在操作表单属性上引用 PHP SELF 我很困惑 我们可以使用 Or action 如果不是 在什么情况下我们应该考虑其中一种或另一种 提前致谢 模模 您可以使用 PH
  • d3 力图:粘性节点

    我想在 D3 中的力导向图形布局中添加一种行为 一旦放下 拖放的 svg 节点就会粘在其位置上 无论图形中发生什么情况 都不再改变位置 我已经阅读了一些有关此 API 的内容 但我无法找到一种方法来使其正常工作 我试图解决的问题是允许用户
  • 使用 dplyr 进行汇总并保持相同的变量名

    我发现 data table 和 dplyr 在尝试做同样的事情时有不同的结果 我想使用 dplyr 语法 但让它以 data table 的方式进行计算 用例是我想将小计添加到表中 为此 我需要对每个变量进行一些聚合 但然后保留相同的变量