设为首页 收藏本站
查看: 1442|回复: 0

[经验分享] R语言实战(二)数据管理

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2017-6-22 06:59:32 | 显示全部楼层 |阅读模式
  本文对应《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 + …
#左边为观测分组(行),右边为变量分组(列)


  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-386612-1-1.html 上篇帖子: 云计算与虚拟化的区别 下篇帖子: 1、HTML中常用标签
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表