transform函数和with/within函数的用法区别

2023-12-16 23:18

本文主要是介绍transform函数和with/within函数的用法区别,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

函数transform

作用:为原数据框添加新的列,可以改变原变量列的值,也可以赋值NULL删除列变量
用法:transform(‘data’, …)
data就是要修改的数据,’…'代表要进行的修改

函数with/within

作用:修改原始数据(不仅限于数据框),添加新的列以及改变原变量列的值等

用法:with/within(data, expr, …)

expr是指R语言的表达式,’…'代表要进行的修改

with函数的返回值是原语句的返回值。within跟with功能相同,但返回值不同,within会返回所有修改生效后的原始数据结构(列表、数据框等)。

下面通过一个简单的例子,说明transform函数与within函数的功能和用法。

假设需要创建一个名称为mydata 的数据框,其中的变量为向量x1和向量x2,现在创建一个新变量sumx存储向量x1和向量x2两个变量的和,并创建另外一个新变量meanx存储向量x1和向量x2两个变量的平均值。

首先,回顾一下数据框的概念。

数据框是R语言里中的一种数据结构,其内部可以由多种数据类型,每一列是一个变量,每行是一个观测记录。数据框是R语言中通用的数据结构,是一种特殊的列表对象。
然后,创建数据框mydata。

#创建数据框mydata,x1和x2是mydata的两个列向量
mydata <- data.frame(x1 = c(2, 2, 6, 4), x2 = c(3, 4, 2, 8))
根据上面提到的作用和用法,利用transform函数为数据框mydata增加数据。

#利用transform函数对数据框mydata增加两个变量(列向量)sumx和meanx,并把结果存储在数据框mydata中
mydata <- transform(mydata, sumx = x1 + x2, meanx = (x1 + x2)/2)
利用within函数为数据框mydata增加数据,这时候我遇到了坑,代码如下

mydata <- within(mydata,sumx = x1 + x2, meanx = (x1 + x2)/2)
报错!

又仔细看帮助文件,发现并书中within函数的例子并没有逗号,并且expr部分使用大括号{}

mydata <- within(mydata,{sumx = x1 + x2 meanx = (x1 + x2)/2})
又报错!

没办法,通过Google查询了大量资料,花了好多时间看代码,我才注意在看到的所有资料的within函数代码中,从meanx全都换行了!所以,我认为需要尝试一下是否within函数同时进行多个修改,每个新修改的代码都需要换行。于是,我又一次修改了代码

mydata <- within(mydata, {sumx = x1 + x2
meanx = (x1 + x2)/2})
运行代码,Bingo! 这次终于没有报错。我又查询了相关资料,发现还可以用“分号;”代替换行,代码如下

mydata <- within(mydata, {sumx = x1 + x2; meanx = (x1 + x2)/2})
运行代码,正确!没有报错!

整理一下正确代码,如下

#创建数据框mydata,x1和x2是mydata的两个列向量
mydata <- data.frame(x1 = c(2, 2, 6, 4), x2 = c(3, 4, 2, 8))

#利用transform函数对数据框mydata增加两个变量(列向量)sumx和meanx,并把结果存储在数据框mydata中
mydata <- transform(mydata, sumx = x1 + x2, meanx = (x1 + x2)/2)

#利用within函数,expr表达式执行一条语句占一行,执行多条语句需要换行
mydata <- within(mydata, {sumx = x1 + x2
meanx = (x1 + x2)/2})

#或者多条语句在同一行,则中间应当用分号;隔开
mydata <- within(mydata, {sumx = x1 + x2; meanx = (x1 + x2)/2})
又查询了更多资料,总结全部要点如下:

transform函数只能用于数据框改变,而within函数应用更宽泛一些,可以用于除数据框之外的数据对象的改变。

R语言中expr表达式执行一条语句占一行,执行多条语句需要换行;如果需要多条语句在同一行,则中间应当用分号;隔开。

transform(数据框名, 对数据框的一系列修改),这些修改中间用逗号分隔,别换行。

within(数据框名, {修改1;修改2;修改3;…})或者within(数据框名,{修改1

修改2

修改3})

这篇关于transform函数和with/within函数的用法区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/502244

相关文章

Before和BeforeClass的区别及说明

《Before和BeforeClass的区别及说明》:本文主要介绍Before和BeforeClass的区别及说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录Before和BeforeClass的区别一个简单的例子当运行这个测试类时总结Before和Befor

Python中help()和dir()函数的使用

《Python中help()和dir()函数的使用》我们经常需要查看某个对象(如模块、类、函数等)的属性和方法,Python提供了两个内置函数help()和dir(),它们可以帮助我们快速了解代... 目录1. 引言2. help() 函数2.1 作用2.2 使用方法2.3 示例(1) 查看内置函数的帮助(

mapstruct中的@Mapper注解的基本用法

《mapstruct中的@Mapper注解的基本用法》在MapStruct中,@Mapper注解是核心注解之一,用于标记一个接口或抽象类为MapStruct的映射器(Mapper),本文给大家介绍ma... 目录1. 基本用法2. 常用属性3. 高级用法4. 注意事项5. 总结6. 编译异常处理在MapSt

C++ 函数 strftime 和时间格式示例详解

《C++函数strftime和时间格式示例详解》strftime是C/C++标准库中用于格式化日期和时间的函数,定义在ctime头文件中,它将tm结构体中的时间信息转换为指定格式的字符串,是处理... 目录C++ 函数 strftipythonme 详解一、函数原型二、功能描述三、格式字符串说明四、返回值五

java中long的一些常见用法

《java中long的一些常见用法》在Java中,long是一种基本数据类型,用于表示长整型数值,接下来通过本文给大家介绍java中long的一些常见用法,感兴趣的朋友一起看看吧... 在Java中,long是一种基本数据类型,用于表示长整型数值。它的取值范围比int更大,从-922337203685477

MyBatis ResultMap 的基本用法示例详解

《MyBatisResultMap的基本用法示例详解》在MyBatis中,resultMap用于定义数据库查询结果到Java对象属性的映射关系,本文给大家介绍MyBatisResultMap的基本... 目录MyBATis 中的 resultMap1. resultMap 的基本语法2. 简单的 resul

Python主动抛出异常的各种用法和场景分析

《Python主动抛出异常的各种用法和场景分析》在Python中,我们不仅可以捕获和处理异常,还可以主动抛出异常,也就是以类的方式自定义错误的类型和提示信息,这在编程中非常有用,下面我将详细解释主动抛... 目录一、为什么要主动抛出异常?二、基本语法:raise关键字基本示例三、raise的多种用法1. 抛

java中Optional的核心用法和最佳实践

《java中Optional的核心用法和最佳实践》Java8中Optional用于处理可能为null的值,减少空指针异常,:本文主要介绍java中Optional核心用法和最佳实践的相关资料,文中... 目录前言1. 创建 Optional 对象1.1 常规创建方式2. 访问 Optional 中的值2.1

git stash命令基本用法详解

《gitstash命令基本用法详解》gitstash是Git中一个非常有用的命令,它可以临时保存当前工作区的修改,让你可以切换到其他分支或者处理其他任务,而不需要提交这些还未完成的修改,这篇文章主要... 目录一、基本用法1. 保存当前修改(包括暂存区和工作区的内容)2. 查看保存了哪些 stash3. 恢

Python中bisect_left 函数实现高效插入与有序列表管理

《Python中bisect_left函数实现高效插入与有序列表管理》Python的bisect_left函数通过二分查找高效定位有序列表插入位置,与bisect_right的区别在于处理重复元素时... 目录一、bisect_left 基本介绍1.1 函数定义1.2 核心功能二、bisect_left 与