5. 数据结构

5.1 数据结构简介

(1)向量

一个向量的所有元素必须有相同的类型(模式)

(2)列表

列表可以非同质的

列表可按位置索引:lst[[2]]

抽取子列表:lst[c(2,5)]

列表可以有名称:lst[[“Moe”]]或者lst$Moe

列表类似于字典、散列表等

(3)模式:实体类型

> mode(3.1415)

R中每个对象都有一个模式,表明该对象如何存储在存储器中:

对象

例子

模式

Number

3.14

numeric

Vector of numbers

c(2.7, 3.14)

numeric

Character string

“Moe”

character

Vector of Character string

c(“Moe”, “Larry”)

character

Factor

factor(c(“NY”,”CA”,”IL”))

numeric

List

list(“Moe”,”Larry”)

list

Data frame

data.frame(x=1:3, y=c(“NY”,”CA”,”IL”))

list

Function

print

function

(4)类:抽象类型

> d <—as.Date(“2010-03-10”)

> class(d)             //结果是“Date”

R中每个对象有一个定义它们抽象类型的类(class)

(5)纯量(常量)

又叫做拥有唯一元素的向量

(6)矩阵

R中矩阵只是有维数的向量

向量的维数,初始值为NULL

> A <—1:6

> dim(A)<— c(2,3)           //成为2*3的矩阵

(7)数组(array)

矩阵只是二维的向量,数组可以是多维的向量

(8)因子(factor)

R记录向量中的唯一值,每一个唯一值称为相关联因子的水平,参照5.5

因子两个关键应用:分类变量、分组

(9)数据框

旨在模拟数据集,与SAS或SPSS中数据集

5.2 对向量添加数据

> v <—c(1,2,3)

> v <—c(v, 4)             //把4加入原向量为:1,2,3,4

> w <—c(5,6,7,8)

> v <—c(v,w)             //将v和w合并

5.3 在向量中插入数据

> append(vec,newvalues, after=n)              //在vec中的第n个元素后面插入newvalues

5.4 理解循环规则

当较短的向量处理完所有元素,而较长的向量仍有未处理元素,较短向量返回到开始位置循环各元素

5.5 构建因子

因子由各分类变量组成,每个分类变量的可能值称为一个水平

> f <—factor(v)

5.6 创建列表

> lst <—list(0.5,0.8,0.3)

> lst <—list(mid=0.5, right=0.8, left=0.3)

> lst[[2]]

>lst[[“mid”]]       或lst[“mid”]              或lst$mid

5.7 从列表中移除元素

> lst[[“mid”]]<— NULL           //移除mid元素

5.8 将列表转换为向量

> v <—unlist(lst)

5.9 从列表中移除取值为NULL的元素

> lst[sapply(lst,is.null)] <— NULL

5.10 使用条件来移除列表元素

> lst[lst< 0] <— NULL                     //移除小于0的元素

>lst[is.na(lst)] <— NULL          //移除值为NA的元素

> lst[abs(unlist(lst))< 1]

5.11 矩阵初始化

> mat <—matrix(vec, 2, 3)            //从vec数据生成一个2*3的矩阵

> dim(vec)<— c(2,3)                      //方法2

5.12 矩阵运算

> t(A)                   //矩阵A的转置

> solve(A)            //矩阵A的求逆

> A %*% B           //矩阵A*B

> diag(n)              //生成一个n阶对角单位矩阵

5.13 将描述性名称赋给矩阵的行和列

> rownames(mat)<— c(“rowname_1”, “rowname_2”, …, “rowname_n”)

> colnames(mat)<— c(“colname_1”, “colname_2”, …, “colname_n”)

5.14 从矩阵中选定一行或一列

> vec <—mat[1,]                     //结果是一个向量

> vec <—mat[,2 ,drop=FALSE]                     //结果是一个矩阵

5.15 用列数据初始化数据框

> dfrm <—data.frame(v1, v2, v3, f1, f2)            //用向量和因子初始化数据框

> lst <—list(v1, v2, v3)

> dfrm <—as.data.frame(lst)                             //方法2

5.16 用行数据初始化数据框

当每行的数据是由数字、字符等不同模式数据混合时,不能用向量存储数据。一般将每一行存储在一个单行数据框中,然后组成一个列表,调用函数rbind和do.call把多行结合成一个大数据框。

> obs <—list(data.frame(vc1=1, f1=0), data.frame(vc1=2, f1=1))

> dfrm <—rbind(obs[[1]], obs[[2]])                    //将前两行组成一个数据框

> dfrm <—do.call(rbind, obs)                      //将所有行组成一个数据框

当obs不是数据框的列表,而是列表的列表,先调用Map函数将行数据转换成数据框数据,然后再用do.call

> dfrm <—do.call(rbind, Map(as.data.frame, obs))

5.17 添加行至数据框

新行得是单行数据框模式的。

> suburbs<— rbind(suburbs,

+                   data.frame(city=”Nanjing”,county=”Kane”, pop=5421)

+                   data.frame(city=”Beijing”,county=”Jane”, pop=5552))    //同时加两行

5.18 预分配数据框

当数据量很大时候,逐个添加新行构建数据框时,R的内存管理器会不良运转。如果知道必须的行数,可以预先分配空间。

> N <—100000

> dfrm <—data.frame(colname1=numeric(N), colname2=character(N), …)

5.19选中数据框的列

> dfrm[[n]]                        //返回第n列,一个向量

> dfrm[n]                           //返回一个数据框,里面只有第n列

>dfrm[c(n1,n2,n4)]          //

> dfrm[,n]                          //返回一个向量

>dfrm[,c(n1,n3)]              //

> dfrm[[“name”]]             > dfrm$name             //返回列名为name的列

> subset(dfrm,select=c(colname1, colname2))  //按列名选取列

>subset(dfrm, select=c(colname1, colname2), subset=(colname1>0))              //满足条件的行,以及只要两列

5.20 修改数据框的列名

> colnames(dfrm)<— c(“before”, “treatment”, “after”)

5.21 编辑数据框

> temp <—edit(dfrm)

> dfrm <—temp                      //将修改后的数据框存为temp

> fix(dfrm)                                //直接修改后覆盖原数据框

5.22 从数据框中移除包含NA的行

> clean_dfrm<— na.omit(dfrm)

5.23 从数据框中移除列

> subset(dfrm,select = -colname2)

5.24 合并两个数据框

当两个数据框的列不一致时,合并是横向的,用cbind:

> all.cols <—cbind(dfrm1, dfrm2)        //横向列合并

当两个数据框的列一致时,合并是纵向的,用rbind:

> all.rows <—rbind(dfrm1, dfrm2)              //纵向行合并

根据共有列合并数据框,类似SQL的join,用merge:

> m <—merge(dfrm1, dfrm2, by=”name”)

5.25 更便捷地访问数据框内容

当用数据框中的列时,本来需要dfrm$colname1,可以用如下命令省去dfrm:

> with(dfrm,expr)            //当前表达式expr中可以直接用colname1

>attach(dfrm)                  //下面的表达式中都可以用colname1

5.26 基本数据类型间的转换

>as.character(x)        //字符型

>as.complex(x)          //复数型

>as.numeric(x)          or           as.double(x)

>as.integer(x)

>as.logical(x)

5.27 不同结构化数据类型间的转换

有些转换是不可行的,要注意。

>as.data.frame(x)

> as.list(x)

>as.matrix(x)

> as.vector(x)

R语言学习笔记(三)的更多相关文章

  1. Go语言学习笔记三: 常量

    Go语言学习笔记三: 常量 定义常量 常量就是在声明后不能再修改的量. const x int = 100 const y string = "abc" const z = &qu ...

  2. R语言学习笔记:小试R环境

    买了三本R语言的书,同时使用来学习R语言,粗略翻下来感觉第一本最好: <R语言编程艺术>The Art of R Programming <R语言初学者使用>A Beginne ...

  3. R语言学习笔记——C#中如何使用R语言setwd()函数

    在R语言编译器中,设置当前工作文件夹可以用setwd()函数. > setwd("e://桌面//")> setwd("e:\桌面\")> s ...

  4. R语言学习笔记之: 论如何正确把EXCEL文件喂给R处理

    博客总目录:http://www.cnblogs.com/weibaar/p/4507801.html ---- 前言: 应用背景兼吐槽 继续延续之前每个月至少一次更新博客,归纳总结学习心得好习惯. ...

  5. R语言学习笔记-机器学习1-3章

    在折腾完爬虫还有一些感兴趣的内容后,我最近在看用R语言进行简单机器学习的知识,主要参考了<机器学习-实用案例解析>这本书. 这本书是目前市面少有的,纯粹以R语言为基础讲解的机器学习知识,书 ...

  6. R语言学习笔记(二)

    今天主要学习了两个统计学的基本概念:峰度和偏度,并且用R语言来描述. > vars<-c("mpg","hp","wt") &g ...

  7. R语言学习笔记:字符串处理

    想在R语言中生成一个图形文件的文件名,前缀是fitbit,后面跟上月份,再加上".jpg",先不百度,试了试其它语言的类似语法,没一个可行的: C#中:"fitbit&q ...

  8. R语言学习笔记︱Echarts与R的可视化包——地区地图

    笔者寄语:感谢CDA DSC训练营周末上完课,常老师.曾柯老师加了小课,讲了echart与R结合的函数包recharts的一些基本用法.通过对比谢益辉老师GitHub的说明文档,曾柯老师极大地简化了一 ...

  9. R语言学习笔记(五)绘图(1)

      R是一个惊艳的图形构建平台,这也是R语言的强大之处.本文将分享R语言简单的绘图命令.   本文所使用的数据或者来自R语言自带的数据(mtcars)或者自行创建.   首先,让我们来看一个简单例子: ...

  10. R语言学习笔记 (入门知识)

    R免费使用:统计工具:# 注释,行注释块注释:anything="这是注释的内容"常用R语言编辑器:Rsutdio,Tinn-R,Eclipse+StatET:中文会有乱码帮助:? ...

随机推荐

  1. resin的几个常用配置

    参考原文:http://blog.csdn.net/johnson1492/article/details/7913827 本文着重介绍resin的几个常用配置 注: 1. 本文并非resin.con ...

  2. linux 压力测试工具 webbench

    webbench最多可以模拟3万个并发连接去测试网站的负载能力,个人感觉要比Apache自带的ab压力测试工具好,安装使用也特别方便. 1.适用系统:Linux 2.编译安装: 1. wget htt ...

  3. css四可见,部分可见和重叠半透明

    <html> <head> <title>javascript</title> <style type="text/css"& ...

  4. C++获取时间并命名为文件名

    #include <time.h> char pStrPath1[20];time_t currTime;struct tm *mt;Mat saveImg1; currTime = ti ...

  5. Hadoop对数据仓库的影响

    转载http://www.dwway.com/portal.php?mod=view&aid=9065 在过去三年,Hadoop生态系统已经大范围扩展,很多主要IT供应商都推出了Hadoop连 ...

  6. Luogu 4213 【模板】杜教筛(Sum)

    当作杜教筛的笔记吧. 杜教筛 要求一个积性函数$f(i)$的前缀和,现在这个东西并不是很好算,那么我们考虑让它卷上另外一个积性函数$g(i)$,使$(f * g)$的前缀和变得方便计算,然后再反推出这 ...

  7. What is the AppData folder?

    Applies to Windows 8.1, Windows RT 8.1 The AppData folder contains app settings, files, and data spe ...

  8. windows phone之依赖属性(DependencyProperty)

    Windows Presentation Foundation (WPF) 提供了一组服务,这些服务可用于扩展公共语言运行时 (CLR) 属性的功能,这些服务通常统称为 WPF 属性系统.由 WPF ...

  9. .net core 图片合并,图片水印,等比例缩小,SixLabors.ImageSharp

    需要引用 SixLabors.ImageSharp 和SixLabors.ImageSharp.Drawing 引用方法 NuGet包管理 添加程序包来源 https://www.myget.org/ ...

  10. web3部署智能合约碰到的一个奇怪问题

    都是gasLimit惹的祸 解决一个奇怪问题Error: Number can only safely store up to 53 bits 原来好好的node endpointtest.js ,结 ...