首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >编写R函数,该函数仅在声明时进行子集设置

编写R函数,该函数仅在声明时进行子集设置
EN

Stack Overflow用户
提问于 2021-12-13 13:38:57
回答 2查看 47关注 0票数 0

我正在尝试编写一个函数,从特定列(深度)的数据帧中提取方法和min和max,它可以被两个分类变量分类,因此在函数中,一个是按类型变量分组的。另一个分类变量是在2020年或2021年收集的数据。我希望默认函数提取所有年份的数据,除非在参数中说明,然后按年对数据进行子集。如果我能改变变量(比如长度而不是深度),那也是很好的。这是我的密码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
analysis <- function(data=measurements, yearX=2020){
  data %>%
    subset(year == yearX) %>%  ## Subsets the dataset by specific year
    group_by(type) %>%  ## groups the data by type 
    summarise(mBD=mean(depth), sdBD=sd(depth), minBD=min(depth),
              maxBD=max(depth), median=median(depth), 
              range=(max(depth) - min(depth)))
}
EN

回答 2

Stack Overflow用户

发布于 2021-12-13 14:01:34

实现您期望的结果的一个选项可能如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
set.seed(123)

measurements <- data.frame(
  year = rep(2020:2021, each = 10),
  type = rep(c("A", "B")),
  length = runif(20),
  depth = runif(20)
)

library(dplyr)

analysis <- function(data = measurements, x, yearX = NULL) {
  # Subset by year if given
  if (!is.null(yearX)) data <- filter(data, year %in% yearX) 
  data %>%
    group_by(type) %>%
    summarise(across({{x}}, .fns = list(
      mBD = mean, 
      sdBD = sd, 
      minBD = min, 
      maxBD = max, 
      median = median, 
      range = ~ diff(range(.x))), .names = "{.fn}"
      ))
}

analysis(x = depth)
#> # A tibble: 2 × 7
#>   type    mBD  sdBD  minBD maxBD median range
#>   <chr> <dbl> <dbl>  <dbl> <dbl>  <dbl> <dbl>
#> 1 A     0.577 0.290 0.0246 0.963  0.648 0.938
#> 2 B     0.576 0.299 0.147  0.994  0.643 0.847

analysis(measurements, depth, 2020)
#> # A tibble: 2 × 7
#>   type    mBD  sdBD minBD maxBD median range
#>   <chr> <dbl> <dbl> <dbl> <dbl>  <dbl> <dbl>
#> 1 A     0.604 0.217 0.289 0.890  0.641 0.600
#> 2 B     0.627 0.307 0.147 0.994  0.693 0.847

analysis(measurements, length, 2021)
#> # A tibble: 2 × 7
#>   type    mBD  sdBD  minBD maxBD median range
#>   <chr> <dbl> <dbl>  <dbl> <dbl>  <dbl> <dbl>
#> 1 A     0.462 0.348 0.103  0.957  0.328 0.854
#> 2 B     0.584 0.370 0.0421 0.955  0.573 0.912
票数 1
EN

Stack Overflow用户

发布于 2021-12-13 22:49:22

为了从函数中使用subset()的方便性,我们可以使用match.call()matchformalArgs of subset.default一起创建一个subset调用,我们可以使用evaluate。如果没有指定子集,则行类似于省略。

对于剩下的部分,我们定义了一个汇总函数,在这里我们应该定义当有NA's时会发生什么,并在aggregate()中使用它,并使用一个很容易用reformulate()创建的公式。

有了案例处理,我们也可以省略分组。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FUN <- function(..., col, group=NA, na.rm=FALSE) {
  cll <- match.call()
  m <- match(formalArgs(subset.default), names(cll), 0L)
  m <- cll[c(1L, m)]
  m[[1L]] <- quote(subset)
  dat <- eval(m)
  mysum <- function(x) c(mBD=mean(x, na.rm=na.rm), sdBD=sd(x, na.rm=na.rm), 
                         minBD=min(x, na.rm=na.rm), maxBD=max(x, na.rm=na.rm), 
                         median=median(x, na.rm=na.rm), 
                         range=max(x, na.rm=na.rm) - min(x, na.rm=na.rm))
  if (!is.na(group)) {
    res <- aggregate(reformulate(group, col), dat, mysum)
  } else {
    res <- mysum(dat[, col])
  }
  return(res)
}

用法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
FUN(x=measurements, col='depth', group='type')
#   type  depth.mBD depth.sdBD depth.minBD depth.maxBD depth.median depth.range
# 1    A 0.57739614 0.29037002  0.02461368  0.96302423   0.64810631  0.93841055
# 2    B 0.57604555 0.29862847  0.14711365  0.99426978   0.64347271  0.84715613

FUN(x=measurements, col='depth', group='type', subset=year == 2020)
#   type depth.mBD depth.sdBD depth.minBD depth.maxBD depth.median depth.range
# 1    A 0.6037955  0.2169419   0.2891597   0.8895393    0.6405068   0.6003796
# 2    B 0.6273719  0.3070970   0.1471136   0.9942698    0.6928034   0.8471561

FUN(x=measurements, col='length', group='type', subset=year == 2020)
#   type length.mBD length.sdBD length.minBD length.maxBD length.median length.range
# 1    A  0.5433124   0.2457008    0.2875775    0.9404673     0.5281055    0.6528898
# 2    B  0.6131826   0.3633747    0.0455565    0.8924190     0.7883051    0.8468625

FUN(x=measurements, col='depth', group=NA)
#        mBD       sdBD      minBD      maxBD     median      range 
# 0.57672085 0.28667353 0.02461368 0.99426978 0.64810631 0.96965609  

数据(从斯特凡借用):

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
measurements <- structure(list(year = c(2020L, 2020L, 2020L, 2020L, 2020L, 2020L, 
2020L, 2020L, 2020L, 2020L, 2021L, 2021L, 2021L, 2021L, 2021L, 
2021L, 2021L, 2021L, 2021L, 2021L), type = c("A", "B", "A", "B", 
"A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", "B", "A", 
"B", "A", "B"), length = c(0.287577520124614, 0.788305135443807, 
0.4089769218117, 0.883017404004931, 0.940467284293845, 0.0455564993899316, 
0.528105488047004, 0.892419044394046, 0.551435014465824, 0.456614735303447, 
0.956833345349878, 0.453334156190977, 0.677570635452867, 0.572633401956409, 
0.102924682665616, 0.899824970401824, 0.24608773435466, 0.0420595335308462, 
0.327920719282702, 0.954503649147227), depth = c(0.889539316063747, 
0.6928034061566, 0.640506813768297, 0.994269776623696, 0.655705799115822, 
0.708530468167737, 0.544066024711356, 0.59414202044718, 0.28915973729454, 
0.147113647311926, 0.963024232536554, 0.902299045119435, 0.690705278422683, 
0.795467417687178, 0.0246136845089495, 0.477795971091837, 0.758459537522867, 
0.216407935833558, 0.318181007634848, 0.231625785352662)), class = "data.frame", row.names = c(NA, 
-20L))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70341256

复制
相关文章
Visual Studio2010中的外部依赖项
Visual Studio2010中的项目下拉列表下面有外部依赖项,里面显示的文件是你程序中显示包含的头文件所包含的的头文件。比如,main函数里面包含了windows.h头文件,而windows.h头文件又包含其他头文件,而这些头文件又可能还包含另外的头文件,所有这些都显示在外部依赖项里面。于是有的时候外部依赖性就变得很庞大。 若想减少外部依赖项,那就尽量避免包含不必要的头文件。 不过根据编译器的行为,可能编译时应该会过滤掉那些虽然包含进来,但完全没有用到的头文件。完全可以不必理会外部依赖项。
AIHGF
2019/02/18
2.7K0
visual studio 2010小技巧
如下想了解更多的关键方式,请参考此文:http://blog.csdn.net/alps_008/article/list/2?viewmode=contents 1,Visual Studio 20
跟着阿笨一起玩NET
2018/09/18
7290
Visual Studio 2010安装体验
    前几天利用公司强大的网络从微软官方下载了最新的Visual Studio 2010 RC版,共花了15分钟搞定。用自己的16G U盘拷回家安装,打算尝鲜一下这个传说中具有划时代意义的IDE工具。微软宣称它将是下一个Visual Studio 6.0...
SAP梦心
2022/05/10
6150
Visual Studio 2010安装体验
编程 | Visual Studio 2010安装教程
Microsoft Visual Studio是VS的全称。VS是美国微软公司的开发工具包系列产品。VS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境(IDE)等等。所写的目标代码适用于微软支持的所有平台,包括Microsoft Windows、Windows Mobile、Windows CE、.NET Framework、.Net Core、.NET Compact Framework和Microsoft Silverlight 及Wi
课代表
2018/06/29
1.1K0
Visual Studio 2010的并行调试支持
Visual Studio 2010大幅度的提升了并行调试的用户体验。Visual Stuido 2010的并行调试非常简单,,它提供了两个新的调试工具窗口,以帮助完成基于任务的并行编程。 在 Vis
张善友
2018/01/31
9300
Visual Studio 2010的并行调试支持
解决Visual Studio 2010过卡的问题
装了Visual Assists 插件后,开发中经常会导致整个电脑都处于“挂起”的状态,任务管理器都打不开。后来修改了一下设置,现在已经正常了…
meteoric
2018/11/19
1.7K0
Visual Studio 2010 中JS注释制作
  Visual Studio 2010中的js注释已经很强大了,但怎么才能和调用c#的方法一样容易呢?怎样才能让每个参数都有注释说明呢?底下就是想要的答案。   先上图,如图所示: 其中红色的办法
磊哥
2018/05/08
2.6K0
Visual Studio 2010 中JS注释制作
Visual Studio经典版本VS2010安装。
7、点击[是,向Microsoft Corporation发送有关我的安装体验的信息]
裴来凡
2022/05/28
1.2K0
Visual Studio经典版本VS2010安装。
OpenGL+Visual Studio 2010开发环境搭建
用于OpenGL标准开发的应用程序运行时需有动态链接库opengl32.dll、glu32.dll,这两个文件在安装Windows NT时已自动装载到C:\Windows\System32目录下。OpenGL的图形库函数封装在动态链接库OpenGL32.DLL中,开发基于OpenGL的应用程序
卡尔曼和玻尔兹曼谁曼
2019/01/22
1.4K0
OpenGL+Visual Studio 2010开发环境搭建
Visual Studio 2010 and .NET Framework 4 Training Kit
The Visual Studio 2010 and .NET Framework 4 Training Kit 包括演示,动手实践,例子。这些内容帮助你了解Visual Studio 2010特性和.Net4.0框架技术,包括以下内容: C# 4.0 Visual Basic 10 F# Parallel Extensions Windows Communication Foundation Windows Workflow Windows Presentation Foundation ASP.NET
张善友
2018/01/29
8240
Visual Studio 2010 注册信息修改器
之所以要改这个,就是看那个启动界面不爽。嘎嘎,显示什么微软用户。当然了这个东西可以直接修改注册表或者手工修改,为了简单一点,直接做了个工具出来。
obaby
2023/02/24
5550
Visual Studio 2010 C++ 工程文件解读
在 VS2010 中,C++ 的工程文件已经和 2005 / 2008 有了很大的不同,而是完全采用 MSBUILD 的属性方式进行表达,并且可以让用户通过一次性的配置而对所有的属性进行自定义;
用户3519280
2023/07/08
4030
使用Visual Studio Code编写Vue的札记
前言 Visual Studio Code is a lightweight but powerful source code editor which runs on your desktop a
梁源
2017/04/28
39.4K5
使用Visual Studio Code编写Vue的札记
推荐Visual Studio 2010新功能-IntelliTrace(智能跟踪)
Visual Studio 2010 Ultimate 版本有个新功能IntelliTrace(智能跟踪),IntelliTrace被引入到Visula Studio中来加速我们对.NET应用程序的调试,它通过对预先设置的事件和方法在运行过程中的跟踪并将其有效地传递给调试执行者,从而快速的传递程序在执行过程中的状态和各种信息来帮助开发者更好的调试程序,快速的发现问题。实际上,在Visual Studio 2010之前,Microsoft Visual Stuido已经帮助我们很好的继承了调试工具,比如对变量
张善友
2018/01/19
1K0
推荐Visual Studio 2010新功能-IntelliTrace(智能跟踪)
Visual Studio2010中不能调试CMake生成的项目
在VS2010中打开由CMake生成的工程文件,包含ALL_BUILD、***(编译的项目文件)和ZERO_CHECK三个项目。
AIHGF
2019/02/18
2.1K0
Visual Studio 2010快速参考指南里头的Scrum海报
Visual Studio ALM的快速参考指南是发布在codeplex上的一个指南文档, 地址是http://vs2010quickref.codeplex.com/,这可以作为一个一般的海报和备忘
张善友
2018/01/19
7150
Visual Studio 2010快速参考指南里头的Scrum海报
使用 Visual Studio Agent 2010 进行负载压力测试的安装指南
在 Visual Studio 2010 Ultimate 里,其实不用特别安装 Visual Studio Agent 2010  就能进行负载压力测试,不过若真要进行大流量的负载压力测试,一台主机可能过于单薄,这时我们就需要安装 Visual Studio Agent 2010 的 Test Controller 与多台 Test Agent 透过多台主机一起对 测试中系统 (System Under Tests) 进行负载压力测试,如此一来才能真正看出系统在高压之下是否还能符合效能需求以及是否能够稳定
张善友
2018/01/26
9930
Visual Studio 2017 项目中引用lib静态库
如果在Visual Studio 2017中引用别人事先已经封装好了的lib静态库,那么需要经过一下几个步骤来向项目中导入lib库 首先,事先把需要引入的lib文件的文件目录进行复制,(最好是放置到项目的include目录下) 在引用lib文件的时候,务必同时修改一下两个选项
轻舞飞扬SR
2021/02/24
2.3K0
Visual Studio 2017 项目中引用lib静态库
有关Visual Studio 2010 RTM与Windows Mobile/Windows Phone开发
    4月12日参加了Visual Studio 2010的首发活动,回来通过MSDN Subscription下载了Windows 7 Utimate和Visual Studio 2010 Professional。买了一个4G的优盘,利用Windows7-USB-DVD-tool制作了一个Windows 7 Flash安装镜像。安装Windows 7倒是挺方便,也是挺快的,前后花了大概10来分钟时间。安装Visual Studio 2010 Professional比较费时间,装完以后,看了一下版本,
ShiJiong
2018/01/10
8670
有关Visual Studio 2010 RTM与Windows Mobile/Windows Phone开发
点击加载更多

相似问题

Visual studio 2010项目中的.ocx

20

Visual Studio 2010项目中的外部库

10

为2010年的Visual studio IDE编写插件

10

在Visual Studio 2010项目中包含外部库

10

在Visual Studio 2010中编辑Visual Studio 2008项目中的源代码

41
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文