在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
本文对应《R语言实战》第4章:基本数据管理;第5章:高级数据管理 创建新变量 #建议采用transform()函数 mydata <- transform(mydata, sumx = x1 + x2, meanx = (x1 + x2)/2)
算术运算符
重编码
#较为直观 leadership$agecat[leadership$age > 75] <- “Elder” leadership$agecat[leadership$age >= 55 & leadership$age <= 75] <- “Middle” leadership$agecat[leadership$age < 55] <- “Young” #或者 leadership <- within(leadership, { agecat <- NA agecat[age > 75] <- “Elder” agecat[age >= 55 & age <= 75] <- “Middle” agecat[age < 55] <- “Young” })
#交互式编辑器编辑变量名 fix(leadership) #reshape包函数rename() library(reshape) leadership <- rename(leadership, c(manager = “managerID”, date = “testDate”)) #names()函数 names(leadership)[6:10] <- c(“item1”, “item2”, “item3”, “item4”, “item5”)
缺失值NA(Not Available)不可能出现的值NaN(Not a Number) #缺失值判定,返回同等大小对象,内容为TRUE或FALSE is.na(object) #缺失值无法比较,不能使用 ”==” 判断
日期值 as.Date(x, “input_format”) x为日期向量,”input_format”为输入格式
#示例 strDates <- c(“01/05/1965”, “08/16/1975”) dates <- as.Date(strDates, “%m/%d/%Y”)
其他日期处理相关的包:lubridate, fCalendar
类型转换
数据排序 order()函数,默认升序 #order()函数示例 newdata <- leadership[order(leadership$gender, -leadership$age), ] #依性别升序和年龄降序排列
添加行: rbind()函数 total <- rbind(dataframeA, dataframeB)
两个数据框中必须要有相同的变量,顺序可以不相同 如果变量不一致,需要提前处理:删除多余变量;或者追加缺失值 添加列: 不指定公共索引时,可以使用cbind() 指定索引,使用merge()
数据集取子集 一般情况下,可以采用如下代码 newdata <- dataframe[row_indices, colomn_indices]
变量(列) #保留变量方式: #指明具体列的序号 newdata <- leadership[, c(6:10)] #指明列名称 myvars <- c(“q1”, “q2”, “q3”, “q4”, “q5”) newdata <- leadership[myvars] #剔除变量方式: #指明序号,使用负号剔除 newdata <- leadership[c(-8, -9)] #设为未定义(NULL) leadership$q3 <- leadership$q4 <- NULL #指明列名称 myvars <- names(leadership) %in% c(“q3”, “q4”) newdata <- leadership[!myvars] #解释:names()函数生成包含所有变量名的字符型向量 # %in%将后面的向量以前面的向量为准进行匹配,返回布尔型向量 #翻转后即可实现向量匹配
#指明行序号 newdata <- leadership[1:3, ] #条件筛选 newdata <- leadership[which(leadership$gender == “M”), ]
#两个例子 newdata <- subset(leadership, age >= 35 | age < 24, select = c(q1, q2, q3, q4)) newdata <- subset(leadership, gender == “M” & age > 25, select = gender : q4)
mysample <- leadership[sample(1:nrow(leadership), 3, replace = FALSE), ]
SQL语句操作数据框 package sqldf
数值和字符处理 数学函数
统计函数
关于scale()函数的说明: 默认情况下,该函数对矩阵或数据框的指定列进行均值为0,方差为1的标准化: newdata <- scale(mydata)
要进行指定均值和方差,使用以下语句 newdata <- scale(mydata) * SD + M
对指定列进行标准化: newdata <- transform(mydata, myvar = scale(myvar) * SD + M)
概率函数 形如 [dpqr]分布缩写 d = 密度函数(density) p = 分布函数(distribution function) q = 分位数函数(quantile function) r = 生成随机数(随机偏差)
如密度函数dnorm, 分布函数pnorm, 分位数函数qnorm, 随机数生成函数rnorm 设定随机数种子:使结果可以复现 set.seed(n)
生成多元正态数据:给定均值向量和协方差矩阵的数据集 library(MASS) mvrnorm(n, mean, sigma)
字符处理函数
函数grep(), sub()和strsplit()能够搜索文本字符串(fixed = TRUE)或者正则表达式(fixed = FALSE, 默认值) 正则表达式用法,参考https://zh.wikipedia.org/wiki/%E6%AD%A3%E5%88%99%E8%A1%A8%E8%BE%BE%E5%BC%8F
其他实用函数
将函数应用于矩阵和数据框 apply族函数,详细应用方式在另一本书中,到时补充吧 一般用法: apply(x, MARGIN, FUN, …) MARGIN = 1 表示应用到行,MARGIN = 2表示应用到列
控制流 循环:
只要可能,尽量应用apply族函数,避免循环语句
条件执行: #if-else结构 if (cond) statement1 else statement2 #ifelse结构:程序行为是二元或输入输出均为向量,尽量使用本结构 ifelse(cond, statement1, statement2) #switch结构 switch(expr, …)
自编函数的一些注意事项,在Google’s R Style Guide (https://google.github.io/styleguide/Rguide.xml) 中提到,详情可直接参考网页
整合与重构 转置 #对矩阵或数据框进行转置 t()
使用一个或多个变量,一个预先定义好的函数,对数据进行折叠(collapse) aggregate(x, by, FUN) #示例 attach(mtcars) aggdata <- aggregate(mtcars, by = list(cyl, gear), FUN = mean, na.rm = TRUE) #返回根据cyl, gear为组合的组为观测,各个变量的均值
融合与重铸 #融合,使每一行都是一个唯一的标识符-变量组合 library(reshape) md <- melt(mydata, id = (c(“id”, “time”))) #重铸 newdata <- cast(md, formula, FUN) #formula形式:rowvar1 + rowvar2 + … ~ colvar1 + colvar2 + … #左边为观测分组(行),右边为变量分组(列)
|
请发表评论