Creating new variables
Arithmetic operators
将新的变量纳入到原始数据框架中,如图两种方法:
transform()更加简便
Recoding variables
要重新编码数据,可以使用R的一个或多个逻辑运算符(见表3.3)。逻辑运算符是返回TRUE或FALSE的表达式。
The statement variable[condition] <- expression will only make the assignment when condition is TRUE.
leadership$age[leadership$age == 99] <- NA
leadership$agecat[leadership$age > 75] <- "Elder"
leadership$agecat[leadership$age >= 55 & leadership$age <= 75] <- "Middle Aged" leadership$agecat[leadership$age < 55] <- "Young"
This code can be written more compactly as follows:
leadership <- within(leadership,{
agecat <- NA
agecat[age > 75] <- "Elder"
agecat[age >= 55 & age <= 75] <- "Middle Aged"
agecat[age < 55] <- "Young" })
The within() function is similar to the with() function (section 2.2.4), but it allows you to modify the data frame.
首先创建变量agecat,并将数据帧的每一行设置为缺失。然后依次执行大括号内的剩余语句。请记住agecat是一个字符变量;您很可能希望将其转化为有序因子,如2.2 . 5节所述。
transform与within的区别:【R语言】:transform函数与with/within函数 - 知乎 (zhihu.com)
1.函数transform:
作用:为原数据框添加新的列,可以改变原变量列的值,也可以赋值NULL删除列变量
用法:transform(‘data’, ...)
data就是要修改的数据,'...'代表要进行的修改
2.函数with/within
作用:修改原始数据(不仅限于数据框),添加新的列以及改变原变量列的值等
用法:with/within(data, expr, ...)
expr是指R语言的表达式,'...'代表要进行的修改
with函数的返回值是原语句的返回值。within跟with功能相同,但返回值不同,within会返回所有修改生效后的原始数据结构(列表、数据框等)。
总结:transform函数只能用于数据框改变,而within函数应用更宽泛一些,可以用于除数据框之外的数据对象的改变。
R语言中expr表达式执行一条语句占一行,执行多条语句需要换行;如果需要多条语句在同一行,则中间应当用分号;隔开。
transform(数据框名, 对数据框的一系列修改),这些修改中间用逗号分隔,别换行。
within(数据框名, {修改1;修改2;修改3;......})或者within(数据框名,{修改1
修改2
修改3})
通过一个简单的例子,说明transform函数与within函数的功能和用法:
#创建数据框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})
#也可以这样~
library(tidyverse)
tbl_df(mydata)%>%mutate(sumx=x1+x2,meanx=(x1+x2)/2)
with与within的区别: