创建新变量

变量名 <- 表达式

表达式可以包含多种运算符和函数。

+ , - , * , / , ^ 或 * *(求幂),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第四章:基本数据管理相关推荐

  1. 【数据库系统】数据库系统概论====第十四章 大数据管理

    第十四章 大数据管理 文章目录 第十四章 大数据管理 14.1大数据概述 14.1.1什么是大数据 14.1.2大数据的特征 14.2大数据的应用 14.2.1感知现在 预测未来----互联网文本大数 ...

  2. 『原创』统计建模与R软件-第四章 参数估计

    摘要: 本文由digging4发表于:http://www.cnblogs.com/digging4/p/5054594.html 统计建模与R软件-第四章 参数估计 4.1设总体的分布密度为 f(x ...

  3. R语言学习笔记——高级篇:第十四章-主成分分析和因子分析

    R语言 R语言学习笔记--高级篇:第十四章-主成分分析和因子分析 文章目录 R语言 前言 一.R中的主成分和因子分析 二.主成分分析 2.1.判断主成分的个数 2.2.提取主成分 2.3.主成分旋转 ...

  4. 统计建模与R软件第四章习题…

    原文地址:统计建模与R软件第四章习题答案(参数估计) 作者:蘓木柒 Ex4.1 只会极大似然法,不会矩法... Ex4.2 指数分布,λ的极大似然估计是n/sum(Xi) > x<-c(r ...

  5. R语言实战笔记--第十四章 主成分和因子分析

    R语言实战笔记–第十四章 主成分和因子分析 标签(空格分隔): R语言 主成分分析 因子分析 原理及区别 主成分分析与因子分析很接近,其目的均是为了降维,以更简洁的数据去解释结果,但这两种方法其实是相 ...

  6. 陈强教授《机器学习及R应用》课程 第十四章作业

    #第十四章作业#14.1 使用UCI数据集中液体超声波流量计数据Meter_D,进行多分类问题SVM估计,响应变量为流量计的四种状态 #(1)读取数据,把第44个变量设为因子 rm(list=ls() ...

  7. 《永磁无刷电机及其驱动技术》R.Krishnan 第四章 永磁同步电机控制策略 4.3.2 代码

    使用matlab 第四章 永磁同步电机控制策略 4.3.2 修改一些书中错误的地方%永磁同步电机仿真 恒转角 %滞环控制器 %转矩驱动 clear all;close all; %电机参数 P=6; ...

  8. 《Python自然语言处理(第二版)-Steven Bird等》学习笔记:第11章 语言数据管理

    第11章 语言数据管理 11.1 语料库结构:一个案例研究 主要设计特点 基本数据类型 11.2 语料库生命周期 语料库创建的三种方案 质量控制 维护与演变 11.3 数据采集 从网上获取数据 从字处 ...

  9. C++ Primer 学习笔记(第四章:表达式)

    2019独角兽企业重金招聘Python工程师标准>>> ##C++ Primer 学习笔记(第四章:表达式) [TOC] ###4.1 基础 左值和右值: 当一个对象被用作右值的时候 ...

最新文章

  1. News | Atomwise获投1.23亿美元推进AI药物研发
  2. 基于 Kubernetes 的微服务部署即代码
  3. ARCSDE的直接连接(SQLSERVER)
  4. linux二重启动防止
  5. 产品经理必懂技术术语(前端类)
  6. python—15种字符串操作
  7. Facebook人工智能实验室的前世今生
  8. java入门第二季 答答租车系统
  9. 扣丁三国 - 技术支持
  10. 桌面计算机隐藏这么找,电脑桌面图标隐藏了怎么弄出来
  11. 世界各国Google域名后缀对照表
  12. python str转换成float
  13. Google引擎搜索技巧
  14. GPT-3根据输入词执行多句子生成
  15. 回溯法采用的搜索策略_下面哪种函数是回溯法中为避免无效搜索采取的策略( )...
  16. SQL注入-04-(最后有实战教学)关系注入逻辑注入
  17. 华为宣布出售荣耀,声明来了
  18. linux sht11驱动,SHT11.h下载 温湿度传感器SHT11的驱动程序,提供了外界调用接口函数...
  19. 电商平台关键词监控价格API接口,店铺监控API接口调用展示
  20. 分数线在计算机上是什么意思,中考录取分数线是什么意思

热门文章

  1. Shiro 权限管理入门之认证与授权
  2. SELinux系列(十五)—auditd日志使用方法详解
  3. libspark.swfassist的体会
  4. flex4.5的DataGrid
  5. python合并文件夹下的文件_Python实现合并同一个文件夹下所有txt文件的方法示例...
  6. php遗漏,PHP被遗漏的执行函数
  7. php中怎样创建数据库服务器,实例讲解通过​PHP创建数据库
  8. mysql中member_在MySql中实现MemberShip的权限管理
  9. mysql事务最好别用_理解完这些基本上能解决面试中MySql的事务问题
  10. 【caffe】caffe采用multistep,绘制loss曲线出错