当前位置: 首页 > 知识库问答 >
问题:

dplyr能总结几个变量而不列出每个变量吗?[副本]

卫景明
2023-03-14
library(dplyr)
library(reshape2)

(df=dput(structure(list(sex = structure(c(1L, 1L, 2L, 2L), .Label = c("boy", 
"girl"), class = "factor"), age = c(52L, 58L, 40L, 62L), bmi = c(25L, 
23L, 30L, 26L), chol = c(187L, 220L, 190L, 204L)), .Names = c("sex", 
"age", "bmi", "chol"), row.names = c(NA, -4L), class = "data.frame")))

   sex age bmi chol
1  boy  52  25  187
2  boy  58  23  220
3 girl  40  30  190
4 girl  62  26  204

dg=group_by(df,sex)
summarise(dg,mean(age),mean(bmi),mean(chol))
dm=melt(df, id.var='sex')
dmg=group_by(dm, sex, variable); 
x=summarise(dmg, means=mean(value))
dcast(x, sex~variable)

但是如果我有超过20个变量和非常大的行数呢。在data.table中有没有类似于。sd的东西可以让我在分组数据框架中获取所有变量的平均值?或者,是否可以在分组的数据帧上使用lapply?

谢谢你的帮助

共有1个答案

狄飞尘
2023-03-14

data.table习惯用法是lapply(.sd,mean),它是

DT <- data.table(df)
DT[, lapply(.SD, mean), by = sex]
#     sex age bmi  chol
# 1:  boy  55  24 203.5
# 2: girl  51  28 197.0

我不确定是否有dplyr用于相同的事情,但您可以执行以下操作:

dg <- group_by(df, sex)
# the names of the columns you want to summarize
cols <- names(dg)[-1]
# the dots component of your call to summarise
dots <- sapply(cols ,function(x) substitute(mean(x), list(x=as.name(x))))
do.call(summarise, c(list(.data=dg), dots))
# Source: local data frame [2 x 4]

#    sex age bmi  chol
# 1  boy  55  24 203.5
# 2 girl  51  28 197.0

注意,在dplyr中,有一个github问题#178可以高效地实现plyr习惯用法colwise

 类似资料:
  • 我试图在一个数据集中的多个主题上求和多个变量。我知道如何使用plyr包来实现这一点;然而,由于数据集的长度,变量的数量,以及我试图做的不同滚动和的数量(2天,3天,4天等)。我想知道是否有人有更多的时间,更有效的方式来完成这项任务在DPLYR。 我的数据与此类似: 谢谢你。

  • Per-cpu 变量是一项内核特性。从它的名字你就可以理解这项特性的意义了。我们可以创建一个变量,然后每个 CPU 上都会有一个此变量的拷贝。本节我们来看下这个特性,并试着去理解它是如何实现以及工作的。 内核提供了一个创建 per-cpu 变量的 API - DEFINE_PER_CPU 宏: #define DEFINE_PER_CPU(type, name) \ DEFINE_

  • 我想为一个变量计算一些分位数,并通过创建一个新变量来捕获分位数观察属于哪一个。我设法做到每一个步骤,并想知道如何把它们结合起来。我尝试了几个版本,没有一个是有效的。如何缩短以下内容:

  • 在两行中编写一段代码,即交换两个变量而不使用第三个变量。在java中有可能吗

  • 我要做的事 我正在使用一个名为的类和一个名为(生成一个容易记住的密码)和的函数来生成一个密码生成器,这两个函数将生成一个复杂的密码。 我的代码: 我的问题 当我运行这个程序时,我得到一个错误: 完全错误: 回溯(最近一次调用):文件“C:\users\sbenf\oneDrive\python projects\large projects\adventure_colussus_game\pass

  • 我正在寻找一些代码来扩展我的Java知识,我遇到了下面的代码行,我不明白,googling没有返回任何关于这个问题的东西。 =是什么意思/做什么有关于这个的文档(或者更详细地说,这个操作被称为什么)