本文主要是介绍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函数的用法区别的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!