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包解决较复杂的数据处理管理。

相关实践学习
MySQL基础-学生管理系统数据库设计
本场景介绍如何使用DMS工具连接RDS,并使用DMS图形化工具创建数据库表。
相关文章
|
5月前
|
SQL 运维 数据管理
数据管理DMS产品使用合集之如何使用REPLACE函数
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。
|
4月前
|
SQL 数据管理 测试技术
数据管理DMS使用问题之如何创建API
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。
|
4月前
|
SQL 运维 安全
数据管理DMS操作报错合集之如何解决在安全协同模式中遇到报错:在安全规则中没有找到这个ID
阿里云数据管理DMS提供了全面的数据管理、数据库运维、数据安全、数据迁移与同步等功能,助力企业高效、安全地进行数据库管理和运维工作。以下是DMS产品使用合集的详细介绍。
|
3月前
|
SQL DataWorks 关系型数据库
DataWorks操作报错合集之离线同步任务时,如何解决资源组报错:errormessage:Render instance failed
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
4月前
|
分布式计算 自然语言处理 DataWorks
MaxCompute产品使用合集之在DataWorks中,当涉及到MC的投递功能时,所指的自定义RAM角色是什么
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
5月前
|
DataWorks NoSQL Java
DataWorks操作报错合集之数据集成使用公共数据集成资源组写入到redis数据源(使用的是VPC连接),提示以下错误:request action:[InnerVpcGrantVpcInstanceAccessToApp], message:[InvalidInstanceId.怎么解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
5月前
|
机器学习/深度学习 分布式计算 大数据
MaxCompute产品使用问题之如何确保write_table方法能够正确执行
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
6月前
|
数据采集 SQL DataWorks
DataWorks操作报错合集之在DataWorks中出现"Please submit specific code instead of only 'set' or 'use'"这样的异常提示,该怎么处理
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
139 0
|
6月前
|
分布式计算 运维 DataWorks
DataWorks产品使用合集之DataWorks中可以使用什么来获取某个特定表的特定分区的Instance ID
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
48 0
|
6月前
|
SQL 分布式计算 DataWorks
DataWorks产品使用合集之在 DataWorks 中的 ODPS UDF(User-Defined Function,用户自定义函数)中,支持不定长参数如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
72 0