本文对应《R语言实战》第4章:基本数据管理;第5章:高级数据管理

创建新变量

#建议采用transform()函数
mydata <- transform(mydata,
sumx = x1 + x2,
meanx = (x1 + x2)/2)

  

算术运算符

+

-

*

/

**或^

求幂

x%%y

求余(x mod y)。5%%2的结果为1

x%/%y

整数除法。5%/%2的结果为2

重编码

<

小于

<=

小于或等于

>

大于

>=

大于或等于

==

严格等于(比较浮点类型时慎用,易误判)

!=

不等于

!x

非x

x | y

x或y

x & y

x和y

isTRUE(x)

x是否为TRUE

#较为直观
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)
#缺失值无法比较,不能使用 ”==” 判断

  

异常值可以重编码为缺失值;分析中排除缺失值可以使用na.omit()函数。

日期值

as.Date(x, “input_format”)

x为日期向量,”input_format”为输入格式

%d

数字表示的日期

01~31

%a

缩写的星期名

Mon

%A

非缩写的星期名

Monday

%m

数字表示的月份

00~12

%b

缩写的月份

Jan

%B

非缩写的月份

January

%y

两位数的年份

07

%Y

四位数的年份

2007

#示例
strDates <- c(“01/05/1965”, “08/16/1975”)
dates <- as.Date(strDates, “%m/%d/%Y”)

  

提示,也可以将日期转换为字符型变量,继续进行字符串的处理

其他日期处理相关的包:lubridate, fCalendar

类型转换

is.numeric()

as.numeric()

is.character()

as.character()

is.vector()

as.vector

is.matrix()

as.matrix()

is.data.frame()

as.data.frame()

is.factor()

as.factor

is.logical()

as.logical()

数据排序

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”), ]

  

subset()函数

#两个例子
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

数值和字符处理

数学函数

abs(x)

绝对值

sqrt(x)

平方根

ceiling(x)

向上取整

floor(x)

向下取整

trunc(x)

向0取整

round(x, digits = n)

将x舍入为指定位小数

signif(x, digits = n)

将x舍入为指定位有效数字

cos(x), sin(x), tan(x)

余弦正弦正切

acos(x), asin(x), atan(x)

反余弦反正弦反正切

cosh(x), sinh(x), tanh(x)

双曲余弦双曲正弦双曲正切

acosh(x), asinh(x), atanh(x)

反双曲余弦反双曲正弦反双曲正切

exp(x)

自然为底的指数函数

log(x, base = n)

log(x)

log10(x)

n为底的对数

log(x)为自然对数

log10(x)为常用对数

统计函数

mean(x)

平均数(声明里trim = 0.05表示丢弃最大最小的5%数据后的平均数)

median(x)

中位数

sd(x)

标准差

var(x)

方差

mad(x)

绝对中位数

quantile(x, probs)

分位数

range(x)

值域

sum(x)

求和

diff(x, lag = n)

滞后差分,lag指定滞后几项,默认1

x <- c(1, 5, 23, 29)

diff(x)返回c(4, 18, 6)

min(x)

最小值

max(x)

最大值

scale(x, center = TRUE, scale = TRUE)

为数据对象x按列进行中心化(center = TRUE)或标准化(center = TRUE, scale = TRUE)

关于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 = 生成随机数(随机偏差)

分布名称

缩写

分布名称

缩写

Beta分布

beta

Logistic分布

logis

二项分布

binom

多项分布

multinom

柯西分布

cauchy

负二项分布

nbinom

(非中心)卡方分布

chisq

正态分布

norm

指数分布

exp

泊松分布

pois

F分布

f

Wilcoxon符号秩分布

signrank

Gamma分布

gamma

t分布

t

几何分布

geom

均匀分布

unif

超几何分布

hyper

Weibull分布

weibull

对数正态分布

lnorm

Wilcoxon秩和分布

wilcox

如密度函数dnorm, 分布函数pnorm, 分位数函数qnorm, 随机数生成函数rnorm

设定随机数种子:使结果可以复现

set.seed(n)

  

生成多元正态数据:给定均值向量和协方差矩阵的数据集

library(MASS)
mvrnorm(n, mean, sigma)

  

字符处理函数

nchar(x)

计算x中字符数量

substr(x, start, stop)

提取或替换一个字符向量中的子串

substr(“abcdef”, 2, 4)#返回”bcd”

(substr(“abcdef”, 2, 4) <- “22222”)#返回”a222ef”

grep(pattern, x, ignore.case = FALSE, fixed = FALSE)

在x中搜索某种模式。fixed = FALSE, pattern为正则表达式,fixed = TRUE, pattern为文本字符串

返回值为匹配的下标

sub(pattern, replacement, x, ignore.case = FALSE, fixed = FALSE)

在x中搜索pattern, 并用replacement替换

strsplit(x, split, fixed = FALSE)

在split处分割x

paste(… , sep = “”)

连接字符串,分隔符为sep

toupper(x)

大写转换

tolower(x)

小写转换

函数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

其他实用函数

length(x)

返回对象x的长度

seq(from, to, by)

生成一个序列

seq(1, 10, 2)#c(1, 3, 5, 7, 9)

rep(x, n)

将x重复n次

cut(x, n)

将连续型变量x分割为有着n个水平的因子

pretty(x, n)

创建美观的分割点。选取n+1个点,将x分割为n个区间,绘图常用

cat(…, file = “myfile”, append = FALSE)

连接…中的对象,并将其输出到屏幕上或文件中

将函数应用于矩阵和数据框

apply族函数,详细应用方式在另一本书中,到时补充吧

一般用法:

apply(x, MARGIN, FUN, …)

MARGIN = 1 表示应用到行,MARGIN = 2表示应用到列

控制流

循环:

for (var in seq) statement

while (cond) statement

只要可能,尽量应用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为组合的组为观测,各个变量的均值

  

reshape包(reshape2包)

融合与重铸

#融合,使每一行都是一个唯一的标识符-变量组合
library(reshape)
md <- melt(mydata, id = (c(“id”, “time”))) #重铸
newdata <- cast(md, formula, FUN)
#formula形式:rowvar1 + rowvar2 + … ~ colvar1 + colvar2 + …
#左边为观测分组(行),右边为变量分组(列)

  

R语言实战(二)数据管理的更多相关文章

  1. R入门<三>-R语言实战第4章基本数据管理摘要

    入门书籍:R语言实战 进度:1-4章 摘要: 1)实用的包 forecast:用于做时间序列预测的,有auto.arima函数 RODBC:可以用来读取excel文件.但据说R对csv格式适应更加良好 ...

  2. R语言实战(三)基本图形与基本统计分析

    本文对应<R语言实战>第6章:基本图形:第7章:基本统计分析 =============================================================== ...

  3. R语言实战(一)介绍、数据集与图形初阶

    本文对应<R语言实战>前3章,因为里面大部分内容已经比较熟悉,所以在这里只是起一个索引的作用. 第1章       R语言介绍 获取帮助函数 help(), ? 查看函数帮助 exampl ...

  4. R语言实战(七)图形进阶

    本文对应<R语言实战>第11章:中级绘图:第16章:高级图形进阶 基础图形一章,侧重展示单类别型或连续型变量的分布情况:中级绘图一章,侧重展示双变量间关系(二元关系)和多变量间关系(多元关 ...

  5. R 语言实战-Part 4 笔记

    R 语言实战(第二版) part 4 高级方法 -------------第13章 广义线性模型------------------ #前面分析了线性模型中的回归和方差分析,前提都是假设因变量服从正态 ...

  6. R 语言实战-Part 3 笔记

    R 语言实战(第二版) part 3 中级方法 -------------第8章 回归------------------ #概念:用一个或多个自变量(预测变量)来预测因变量(响应变量)的方法 #最常 ...

  7. R语言实战-Part 2笔记

    R 语言实战(第二版) part 2 基本方法 -------------第6章 基本图形------------------ #1.条形图 #一般是类别型(离散)变量 library(vcd) he ...

  8. R语言实战(第二版)-part 1笔记

    说明: 1.本笔记对<R语言实战>一书有选择性的进行记录,仅用于个人的查漏补缺 2.将完全掌握的以及无实战需求的知识点略去 3.代码直接在Rsudio中运行学习 R语言实战(第二版) pa ...

  9. R 语言实战-Part 5-1笔记

    R 语言实战(第二版) part 5-1 技能拓展 ----------第19章 使用ggplot2进行高级绘图------------------------- #R的四种图形系统: #①base: ...

随机推荐

  1. VMWare虚拟机下为Ubuntu 12.04.1配置静态IP(NAT连接方式)

    背景 在虚拟机下运行操作系统,尤其是Linux系统已经是非常常见的做法.有时你想在虚拟机下搭建一个(模拟)服务器来供主机访问,比如搭建一个telnet/ssh.此时你会发现,每次启动虚拟机,VMWar ...

  2. C#调用WebService (转)

    1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求, ...

  3. C语言回顾-结构体、枚举和文件

    1.构造类型 根据已经定义的一个或多个数据类型用构造的方法来定义. 分为:数组.结构体和共用体 2.结构体 struct 结构体名{ 成员列表: }; 1)结构体定义完成以后,计算机不会给结构体分配存 ...

  4. Visual Studio 2015 显示正忙 正在等待内部操作完成

    网上查到的: 1.关闭IntelliTrace 2.进入项目文件夹有.vs的隐藏文件夹,进去找到和项目一样的名字的文件夹,再找v14文件夹,进去,删掉.suo文件 http://www.cnblogs ...

  5. AngularJs的UI组件ui-Bootstrap

    http://www.cnblogs.com/pilixiami/p/5597634.html

  6. wex5 实战 框架拓展之2 事件派发与data刷新

    一 前言 讲完公共data,相信大家对框架级的data组件级绑定有了更新的认识,接下来我们继续深入,以求研究明白wex5的框架能力. 在一个web项目中,其实有一个data, 是基础框架必须的data ...

  7. Java泛型详解 转载

    转载地址:http://blog.csdn.net/jinuxwu/article/details/6771121 比较好的讲解: http://blog.csdn.net/lonelyroamer/ ...

  8. CentOS7 Nginx负载均衡

    五台服务器 192.168.155.129 nginx反向代理服务器 192.168.155.130 apache+PHP服务器,PHP要使用mysql函数库,配置的时候就要指定mysql安装路径,所 ...

  9. 【转】Eclipse快捷键 10个最有用的快捷键

    转载地址:http://www.open-open.com/bbs/view/1320934157953 Eclipse中10个最有用的快捷键组合  一个Eclipse骨灰级开发者总结了他认为最有用但 ...

  10. MOCK DATA -- node路由

    前后端分离,有时候后端接口给的不是很及时,这就需要前端自己mock data, 本文讲的简单的node模拟数据 api路由跳转 首先有个data.js(json)文件, 路由: 配置在dev-serv ...