R第四章:基本数据管理
创建新变量
变量名 <- 表达式
表达式可以包含多种运算符和函数。
+ , - , * , / , ^ 或 * *(求幂),x%%y (求余),x%/%y (整数除法)
#第一种 mydata <- data.frame(x1= c(2, 2, 6, 4),x2= c(3, 4, 2, 8)) mydata$sumx <- mydata$x1 + mydata$x2 mydata$meanx <- (mydata$x1 + mydata$x2) / 2#第二种 attach(mydata) mydata$sumx <- x1 + x2 mydata$meanx <- (x1 + x2) /2 detach(mydata)#第三种 mydata <- transform(mydata, sumx = x1 + x2,meanx = (x1 + x2) / 2)
transform()函数简化了按需创建新变量并将其保存到数据框中的过程。
变量的重编码
重编码涉及根据同一个变量和/或其他变量的现有值创建新值的过程。
语句variable[condition] <- expression 将仅在condition的值为TRUE时执行赋值
leadership <- within(leadership,{agecat <- NAagecat[age >75] <- "Elder"agecat[age >=55 & age <= 75] <- "Middle Aged"agecat[age <55] <- "Young"})
函数within()与函数with()类似,不同的是它允许修改数据框。首先,创建了agecat变量,并将每一行都设为缺失值。括号中剩下的语句接下来依次执行。
变量的重命名
1,交互式地修改
fix()函数来调用一个交互式的编辑器。然后单击变量名,在弹出的对话框中将其重命名。
2,编程式地修改
names()函数来重命名变量。
#查看leadership数据框的所有变量名 names(leadership)#将leadership的第二个变量进行重命名 names(leadership)[2] <- "testDate"#重命名多个变量名 names(leadership)[6:10] <- c("item1", "item2", "item3", "item4", "item5")
plyr包中的rename()函数,使用格式为:
rename(dataframe, c(oldname="newname", oldname="newname", ...))
#安装plyr包 install.packages("plyr") library(plyr) leadership <- rename(leadership,c(manager="managerID", date="testDate"))
缺失值
在R中,缺失值以符号NA(Not Available,不可用)表示。R中字符型和数值型数据使用的缺失值符号是相同的。
函数is.na()用来检测缺失值是否存在。返回一个与检测对象相同大小的对象,如果某个元素是缺失值,相应的位置将被改写为TRUE,不是缺失值的位置则为FALSE.
y <- c(1, 2, 3, NA) #使用函数is.na() is.na(y) #返回 FALSE, FALSE, FALSE, TRUE
***注意:
1,缺失值被认为是不可比较的,即便是与缺失值自身的比较。不能使用比较运算符来检测缺失值是否存在。
例如:逻辑测试var == NA 的结果永远不会为TRUE.
2,R并不把无限的或者不可能出现的数值标记成缺失值。
正无穷和负无穷分别用Inf和-Inf标记。不可能的值(比如,sin(Inf))用NaN来标记(not a number,不是一个数)如果要识别这些数值,需要用到is.infinite()或
is.nan().
一,重编码某些值为缺失值
在分析之前确保所有的缺失数据都被妥善低编码为缺失值,否则分析结果将失去意义。
二,在分析中排除缺失值
在分析之前需要进一步以某种方式删除缺失值。因为含有缺失值的算术表达式和函数的计算结果也是缺失值。
x <- c(1, 2, NA, 3) y <- x[1] + x[2] + x[3] + x[4] z <- sum(x) #由于x中的第3个元素是缺失值,所以y和z也都是NA。 #使用na.rm=TRUE选项y <- sum(x, na.rm=TRUE)
***na.rm=TRUE选项,可以在计算之前移除缺失值并使用剩余值进行计算。
函数na.omit()可以删除所有含有缺失数据的行。
日期值
日期值通常以字符串的形式输入到R中,然后转化为以数值形式存储的日期变量。as.Date()用于执行这种转化。格式为:as.Date(x, "input_format")
其中x是字符型数据,input_format则给出用于读入日期的适当格式。
%d 数字表示的日期(0-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") dates [1] "1965-01-05" "1975-08-16"#不知道为啥输出的日期格式都是yyyy-mm-dd,而不是%m/%d/%Y 这样形式的
Sys.Date() 返回当天的日期,date() 返回当前的日期和时间。
format(x, format="output_format") 输出指定格式的日期值,并且可以提取日期值中的某些部分。
format(today, format="%B %d %Y") [1] "十一月 02 2017" format(today, format="%A") [1] "星期四"
日期可以用来执行算术运算。
startdate <- as.Date("2004-02-13") enddate <- as.Date("2011-01-22") days <- enddate - startdate days Time difference of 2535 days
函数difftime() 计算时间间隔,并以星期,天,时,分,秒来表示。
today <- Sys.Date() dob <- as.Date("1956-10-12") difftime(today, dob, units="weeks") Time difference of 3185.857 weeks
将日期转换为字符型变量
as.character() 可将日期值转换为字符型。
类型转换
判断函数: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()
数据排序
order()函数对一个数据框进行排序,默认的排序顺序是升序。在排序变量的前边加一个减号即可得到降序的排序结果。
newdata <- leadership[order(gender, -age), ]
数据集的合并
1,向数据框添加列
多数情况下,两个数据框是通过一个或多个共有变量进行联结的。可以使用merge()函数
#将dataframeA和dataframeB按照ID进行了合并 total <- merge(dataframeA, dataframeB, by="ID")
直接横向合并两个矩阵或数据框,并且不需要指定一个公共索引,可以直接使用cbind()函数。
total <- cbind(A, B)
要保证每个对象必须拥有相同的行数,以同顺序排序。
2,向数据框添加行
纵向合并两个数据框,使用rbind()函数。
total <- rbind(dataframeA, dataframeB)
两个数据框必须拥有相同的变量,不过它们的顺序不必一定相同。(这句话理解有点问题)
如果dataframeA中拥有dataframeB中没有的变量,需要在合并之前先做处理:
1,删除dataframeA中的多余变量。
2,在dataframeB中创建追加的变量并将其值设为NA(缺失)。
数据集取子集
1,选入(保留)变量
#1,通过dataframe[row indices, column indices]访问 newdata <- leadership[, c(6:10)] #2,变量名 myvars <- c("q1", "q2", "q3", "q4", "q5") newdata <- leadership[myvars] #paste()函数 myvars <- paste("q", 1:5, sep=" ") newdata <- leadership[myvars]
2,剔除(丢弃)变量
#剔除 q3, q4两列 #names(leadership) %in% c("q3", "q4") 返回一个逻辑型向量,匹配q3或q4的元素值为TRUE myvars <- names(leadership) %in% c("q3", "q4") newdata <- leadership[!myvars]#在某一列的下标之前加一个减号(-)就会剔除那一列 newdata <- leadership[c(-8, -9)]#设为NULL(未定义),NULL与NA是不同的 leadership$q3 <- leadership$q4 <- NULL
3,选入观测
#通过设置下标来选入 newdata <- leadership[1:3, ]#通过相应的条件来选入 newdata <- leadership[leadership$gender=="M" & leadership$age>30, ]
4,subset()函数
newdata <- subset(leadership, age >=35 | age <24,select=c(q1, q2, q3, q4,))#冒号运算符 from:to newdata <- subset(leadership, gender=="M" & age >25,select=gender:q4)
5,随机抽样
sample()函数能够让你从数据集中(有放回或无放回地)抽取大小为n的一个随机样本。
mysample <- leadership[sample(1:nrow(leadership), 3, replace=FALSE) , ]
sample()函数中的第一个参数是一个由要从中抽样的元素组成的向量。第二个参数是要抽取的元素数量。第三个参数表示无放回抽样。
使用SQL 语句操作数据框
install.packages("sqldf") library(sqldf) #row.names=TRUE 将原始数据框中的行名延续到了新数据框中 newdf <- sqldf("select * from mtcars where carb=1 order by mpg", row.names=TRUE)
下载并安装好sqldf包,可以使用sqldf()函数在数据框上使用SQL中的SELECT语句。
转载于:https://www.cnblogs.com/xinlanzhang7319/p/7764445.html
R第四章:基本数据管理相关推荐
- 【数据库系统】数据库系统概论====第十四章 大数据管理
第十四章 大数据管理 文章目录 第十四章 大数据管理 14.1大数据概述 14.1.1什么是大数据 14.1.2大数据的特征 14.2大数据的应用 14.2.1感知现在 预测未来----互联网文本大数 ...
- 『原创』统计建模与R软件-第四章 参数估计
摘要: 本文由digging4发表于:http://www.cnblogs.com/digging4/p/5054594.html 统计建模与R软件-第四章 参数估计 4.1设总体的分布密度为 f(x ...
- R语言学习笔记——高级篇:第十四章-主成分分析和因子分析
R语言 R语言学习笔记--高级篇:第十四章-主成分分析和因子分析 文章目录 R语言 前言 一.R中的主成分和因子分析 二.主成分分析 2.1.判断主成分的个数 2.2.提取主成分 2.3.主成分旋转 ...
- 统计建模与R软件第四章习题…
原文地址:统计建模与R软件第四章习题答案(参数估计) 作者:蘓木柒 Ex4.1 只会极大似然法,不会矩法... Ex4.2 指数分布,λ的极大似然估计是n/sum(Xi) > x<-c(r ...
- R语言实战笔记--第十四章 主成分和因子分析
R语言实战笔记–第十四章 主成分和因子分析 标签(空格分隔): R语言 主成分分析 因子分析 原理及区别 主成分分析与因子分析很接近,其目的均是为了降维,以更简洁的数据去解释结果,但这两种方法其实是相 ...
- 陈强教授《机器学习及R应用》课程 第十四章作业
#第十四章作业#14.1 使用UCI数据集中液体超声波流量计数据Meter_D,进行多分类问题SVM估计,响应变量为流量计的四种状态 #(1)读取数据,把第44个变量设为因子 rm(list=ls() ...
- 《永磁无刷电机及其驱动技术》R.Krishnan 第四章 永磁同步电机控制策略 4.3.2 代码
使用matlab 第四章 永磁同步电机控制策略 4.3.2 修改一些书中错误的地方%永磁同步电机仿真 恒转角 %滞环控制器 %转矩驱动 clear all;close all; %电机参数 P=6; ...
- 《Python自然语言处理(第二版)-Steven Bird等》学习笔记:第11章 语言数据管理
第11章 语言数据管理 11.1 语料库结构:一个案例研究 主要设计特点 基本数据类型 11.2 语料库生命周期 语料库创建的三种方案 质量控制 维护与演变 11.3 数据采集 从网上获取数据 从字处 ...
- C++ Primer 学习笔记(第四章:表达式)
2019独角兽企业重金招聘Python工程师标准>>> ##C++ Primer 学习笔记(第四章:表达式) [TOC] ###4.1 基础 左值和右值: 当一个对象被用作右值的时候 ...
最新文章
- News | Atomwise获投1.23亿美元推进AI药物研发
- 基于 Kubernetes 的微服务部署即代码
- ARCSDE的直接连接(SQLSERVER)
- linux二重启动防止
- 产品经理必懂技术术语(前端类)
- python—15种字符串操作
- Facebook人工智能实验室的前世今生
- java入门第二季 答答租车系统
- 扣丁三国 - 技术支持
- 桌面计算机隐藏这么找,电脑桌面图标隐藏了怎么弄出来
- 世界各国Google域名后缀对照表
- python str转换成float
- Google引擎搜索技巧
- GPT-3根据输入词执行多句子生成
- 回溯法采用的搜索策略_下面哪种函数是回溯法中为避免无效搜索采取的策略( )...
- SQL注入-04-(最后有实战教学)关系注入逻辑注入
- 华为宣布出售荣耀,声明来了
- linux sht11驱动,SHT11.h下载 温湿度传感器SHT11的驱动程序,提供了外界调用接口函数...
- 电商平台关键词监控价格API接口,店铺监控API接口调用展示
- 分数线在计算机上是什么意思,中考录取分数线是什么意思
热门文章
- Shiro 权限管理入门之认证与授权
- SELinux系列(十五)—auditd日志使用方法详解
- libspark.swfassist的体会
- flex4.5的DataGrid
- python合并文件夹下的文件_Python实现合并同一个文件夹下所有txt文件的方法示例...
- php遗漏,PHP被遗漏的执行函数
- php中怎样创建数据库服务器,实例讲解通过​PHP创建数据库
- mysql中member_在MySql中实现MemberShip的权限管理
- mysql事务最好别用_理解完这些基本上能解决面试中MySql的事务问题
- 【caffe】caffe采用multistep,绘制loss曲线出错