R In Action |基本数据管理

本文涉及的产品
数据管理 DMS,安全协同 3个实例 3个月
推荐场景:
学生管理系统数据库
简介: R In Action |基本数据管理


4.1 数据集代码

建立示例数据:

manager <- c(1, 2, 3, 4, 5)
 date <- c("10/24/08", "10/28/08", "10/1/08", "10/12/08", "5/1/09")
 country <- c("US", "US", "UK", "UK", "UK")
 gender <- c("M", "F", "F", "M", "F")
 age <- c(32, 45, 25, 39, 99)
 q1 <- c(5, 3, 3, 3, 2)
 q2 <- c(4, 5, 5, 3, 2)
 q3 <- c(5, 2, 5, 4, 1)
 q4 <- c(5, 5, 5, NA, 2)
 q5 <- c(5, 5, 2, NA, 1)
 leadership <- data.frame(manager, date, country, gender, age, q1, q2, q3, q4, q5, stringsAsFactors=FALSE)


4.2 创建新变量

示例:在数据框mydata计算和和平均

mydata<-data.frame(x1 = c(2, 2, 6, 4), x2 = c(3, 4, 2, 8))
# 第一种方式:
 mydata$meanx <- (mydata$x1 + mydata$x2)/2
# 第二种方式:
 attach(mydata)
 mydata$meanx <- (x1 + x2)/2
 detach(mydata)

# 第三种方式:(推荐)

mydata <- transform(mydata, meanx = (x1 + x2)/2)

推荐使用transform()函数进行数据框内的创建新变量运算。

4.3 变量的重编码

1)将连续变量修改为一组类别值;

2)将误编码替换为正确值;

3)基于一组条件进行逻辑判断变量;

4)逻辑运算:

!= 不等于; == 严格等于(慎用); ! 非; | 或;& 和

isTRUE(x) 判断x是否为TRUE

完成以下重编码任务:

将leadership$age == 99 为缺失值,大于75岁为Elder,小于55岁为Young,中间为Middle Aged。

1)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"
2)leadership$age[leadership$age == 99] <- NA
 leadership <- within(leadership,{
   agecat[age == 99] <- NA
   agecat[age > 75] <- "Elder"
   agecat[age >= 55 & age <= 75] <- "Middle Aged"
   agecat[age < 55] <- "Young" })

within()可以认为是数据框版本的with(),将每一行都设置为缺失值,然后按条件赋值(字符型变量,还不是有序因子)。


4.4 变量的重命名

1)使用 fix() 函数可以弹出“交互式编辑器”方便进行直接更改;

2)使用编程方式可以使用 names()函数来重命名变量:

names(leadership)
[1] "manager" "date" "country" "gender" "age" "q1" "q2"
[8] "q3" "q4" "q5"
names(leadership)[2] <- "testDate"
也可以用类似的向量方式批量修改
names(leadership)[6:10] <- c("item1", "item2", "item3", "item4", "item5")
plyr包中有一个rename(dataframe,c(oldname="newname",...)函数进行,后面写。

4.5 缺失值

R中的字符型缺失值与数值型数据使用的缺失值符号是相同的。缺失值以符号NA(Not Available,不可用)表示。

4.5.1 函数is.na()检测缺失值是否存在(存在为TRUE)。

is.na(leadership[,8:10])

注:缺失值是不可比较的,意味着无法使用比较运算符来检测缺失值是否存在。($ == NA 错误)

  不可能的值用NaN来标记(Not a number,不是一个数),用is.nan(),例如:sin(Inf)

4.5.2 重编码某些值为缺失值

leadership$age[leadership$age == 99] <- NA

需要在分析之前将所有的缺失数据正确的标记为缺失值,才能不影响分析过程。

4.5.3 在分析中排除缺失值

针对大部分函数,可以用na.rm=TRUE参数选项,结果忽略缺失值。

sum(leadership$q5, na.rm=TRUE)

[1] 13

4.5.4 函数na.omit()可以移除所有含有缺失值的观测(行)。(慎用)

na.omit(leadership)
  manager     date country gender age q1 q2 q3 q4 q5 agecat
1       1 10/24/08      US      M  32  5  4  5  5  5  Young
2       2 10/28/08      US      F  45  3  5  2  5  5  Young
3       3  10/1/08      UK      F  25  3  5  5  5  2  Young

4.6 日期值

函数as.Date()用于执行这种转化,而符号示例如下:
%d 数字表示的日期(0~31)01~31
%a 缩写的星期名Mon
%A 非缩写星期名Monday
%m 月份(00~12)00~12
%b 缩写的月份Jan
%B 非缩写月份January
%y 两位数的年份07
%Y 四位数的年份2007
leadership$date <- as.Date(leadership$date, "%m/%d/%y")


4.6.1 使用format来输出指定格式的日期值,并且提取日期值中的某些部分:

format(Sys.Date(),"%B %d %Y")
[1] "二月 14 2017"
format(Sys.Date(),"%A")
[1] "星期二"
4.6.2 数值上进行日期计算:
as.Date("2017-01-01")-as.Date("2016-01-01")
Time difference of 366 days
函数difftime()计算间隔和格式化输出:
difftime(as.Date("2017-01-01"),as.Date("2016-01-01"),units="weeks")
Time difference of 52.28571 weeks

4.6.3 将日期转换为字符型变量

as.character()可将日期值转换为字符型


4.7 类型转换

判断:
is.numeric(); is.character(); is.vector(); is.matrix(); is.data.frame(); is.factor(); is.logical()
转换:
as.numeric(); as.character(); as.vector(); as.matrix(); as.data.frame(); as.factor(); as.logical()


4.8 数据排序

使用order()函数对一个数据框进行排序,默认为升序,如果需要降续使用“-”即可。

按照gender正序,其中年龄倒序

leadership[order(gender, -age),]
  manager       date country gender age q1 q2 q3 q4 q5
5       5 2009-05-01      UK      F  99  2  2  1  2  1
2       2 2008-10-28      US      F  45  3  5  2  5  5
3       3 2008-10-01      UK      F  25  3  5  5  5  2
4       4 2008-10-12      UK      M  39  3  3  4 NA NA
1       1 2008-10-24      US      M  32  5  4  5  5  5

4.9 数据集的合并

使用merge()函数对两个数据框进行联结(内联结),例:

total <- merge(dataframeA, dataframeB, by=c("ID","Country"))

如果是简单的使两个行数相等的对象横向联结,可是使用cbind()进行:

total <- cbind(A,B)

如果两个数据框拥有相同的变量,则可以在行上进行合并,使用rbind():

total <- rbind(dataframeA,dataframeB)

4.10 数据集取子集

4.10.1 选入(保留)变量

数据框中的元素是通过dataframe[row indices,column indices]这样的记号来访问的,可以通过这种方法轻松的选取变量。如:

leadership[,c(6:10)] #效果等价
leadership[c("q1","q2","q3","q4","q5")]
  q1 q2 q3 q4 q5
1  5  4  5  5  5
2  3  5  2  5  5
3  3  5  5  5  2
4  3  3  4 NA NA
5  2  2  1  2  1

4.10.2 剔除(丢弃)变量

myvars <- names(leadership) %in% c("q3", "q4")
newdata <- leadership[!myvars]
newdata
  manager       date country gender age q1 q2 q5
1       1 2008-10-24      US      M  32  5  4  5
2       2 2008-10-28      US      F  45  3  5  5
3       3 2008-10-01      UK      F  25  3  5  2
4       4 2008-10-12      UK      M  39  3  3 NA
5       5 2009-05-01      UK      F  99  2  2  1


#names(leadership)是包含所有变量名的字符型向量;通过%in% c("q3", "q4"),生成了变量名为"q3"和"q4"的变量为TRUE,其他的为FALSE。通过第二个命令,选择了变量名不为TRUE的数据框范围。

以下两种方式同样可以:

leadership[c(-8,-9)]  #用“-”表示删掉
leadership$q3 <- leadership$q4 <- NULL #将需要删掉的列定义为NULL(与NA不同)

4.10.3 选入观测

通过逻辑判断的方式,选择需要的内容是数据分析的重要准备工作。

newdata <- leadership[1:3,]
newdata <- leadership[leadership$gender=="M" & leadership$age >= 30,]
newdata
  manager       date country gender age q1 q2 q3 q4 q5
1       1 2008-10-24      US      M  32  5  4  5  5  5
4       4 2008-10-12      UK      M  39  3  3  4 NA NA

日期同样可用

leadership[which(leadership$date >= as.Date("2009-01-01","%Y-%m-%d") & leadership$date <= as.Date("2009-10-31","%Y-%m-%d")),]

4.10.4 subset()函数

subset()函数是选取变量非常快捷的方式。选择方式非常容易理解,而且写法简便。
newdata <- subset(leadership, age >= 35 | age < 24,select=c(q1, q2, q3, q4))
newdata <- subset(leadership, gender=="M" & age > 25,select=gender:q4)

4.10.5 随机抽样

sample()函数能够让你从数据集中(有放回和无放回的)抽取大小为n的一个随机样本:

示例:从1到数据框中观测的数量(总数),抽取的数目和参数:是否放回抽样(仅从总体中取样or越取样本越少)

mysample <- leadership[sample(1:nrow(leadership), 3, replace=FALSE),]

4.11 使用SQL语句操作数据框

使用sqldf包,可以直接使用sqldf()嵌入SQL语句来实现表格的选择。

library(sqldf)
newdf <- sqldf("select * from mtcars where carb=1 order by mpg",row.names=TRUE)
newdf


OK,使用基本的函数解决数据管理就先写这么多,后面再陆续更新一些R包解决较复杂的数据处理管理。

相关文章
|
8天前
|
分布式计算 DataWorks 大数据
MaxCompute操作报错合集之在使用 MaxCompute 的 MMA(Multi-Modal Analytics)进行跨 Region 数据迁移时,在配置数据源时遇到错误,如何解决
MaxCompute是阿里云提供的大规模离线数据处理服务,用于大数据分析、挖掘和报表生成等场景。在使用MaxCompute进行数据处理时,可能会遇到各种操作报错。以下是一些常见的MaxCompute操作报错及其可能的原因与解决措施的合集。
|
8天前
|
分布式计算 DataWorks 安全
DataWorks产品使用合集之DataWorks中,我想在一个flow中调用另一个flow如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
26 0
DataWorks产品使用合集之DataWorks中,我想在一个flow中调用另一个flow如何解决
|
8天前
|
调度 安全
“Dataphin功能tips”系列
hello,大家好: 为了更好地引导广大用户深入探索和高效利用Dataphin全方位的数据智能能力,我们特别推出“Dataphin功能小Tips”系列,旨在通过生动直观的场景描述与对应的功能应用方案,以简洁明快的语言呈现,力求让每一位用户都能轻松解锁Dataphin中的每一个实用功能点。 这一系列内容专为提升您的使用体验而设计,期待能为大家解决实际问题、优化数据管理工作带来切实的帮助,在此,我们也诚挚邀请所有用户积极参与互动,随时分享您宝贵的使用心得与建议。您的反馈将是我们不断迭代优化的重要动力!
105 3
|
8天前
|
数据采集 数据管理 大数据
数据治理-数据质量管理-Data governance
数据治理-数据质量管理-Data governance
92 0
|
7月前
|
监控 前端开发 JavaScript
什么是 Dynatrace 里的 User Action
什么是 Dynatrace 里的 User Action
32 0
|
10月前
|
SQL JSON 运维
数据服务最佳实践(1):支持注册外部API,打造企业数据服务中心【Dataphin V3.11】
在DataphinV3.11版本中,我们支持了注册外部API的能力,用于支持客户统一管理企业所有的API,打造企业的数据服务中心。API注册到Dataphin之后,可以由Dataphin统一纳管,和其他方式创建的API共用相同的服务市场、权限管控、运维监控能力。 同时我们支持了Json文本解析能力,支持编写类似正则表达式的语法定义注册API返回参数的取值路径,满足企业自定义取数的场景。
682 0
|
存储 JavaScript 前端开发
全局数据管理
全局数据管理
|
设计模式 API Android开发
彻底理解View事件体系!
彻底理解View事件体系!
彻底理解View事件体系!
|
XML 安全 Java
action 的三种实现方式 | 学习笔记
快速学习 action 的三种实现方式,介绍了 action 的三种实现方式系统机制, 以及在实际应用过程中如何使用。
191 0
|
机器学习/深度学习 人工智能 分布式计算
PAI Designer RAM用户如何跨项目读表
PAI Designer(Studio 2.0)是基于云原生架构Pipeline Service(PAIFlow)的可视化建模工具, 提供可视化的机器学习开发环境,实现低门槛开发人工智能服务。同时,系统提供丰富且成熟的机器学习算法,覆盖商品推荐、金融风控及广告预测等场景,支持基于MaxCompute、PAI-DLC、Flink等计算资源进行大规模分布式运算,可以满足您不同方向的业务需求。使用Designer进行建模跨项目读取ODPS上游表时由于涉及到DataWorks相关角色授予,很多用户碰到往往不知道如果解决,本文将使用子主账号简单演示对RAM用户授予访问ODPS上游数据的权限。
238 0
PAI Designer RAM用户如何跨项目读表

热门文章

最新文章