R语言语法基础二

重塑数据

增加行和列

  1. # 创建向量
  2. city = c("Tampa","Seattle","Hartford","Denver")
  3. state = c("FL","WA","CT","CO")
  4. zipcode = c(33602, 98104, 06161, 80294)
  5. # 组合向量成数据帧
  6. address1 = cbind(city, state, zipcode)
  7. print(address1)
  8. # 另一种方式创建dataFrame
  9. address2 = data.frame(
  10. city = c("Lowry","Charlotte"),
  11. state = c("CO","FL"),
  12. zipcode = c("80230","33949")
  13. )
  14. print(address2)
  15. # 组合数据帧,rbind是行组合,cbind是列组成
  16. address3 = rbind(address1,address2)
  17. print(address3)
  18. city state zipcode
  19. [1,] "Tampa" "FL" "33602"
  20. [2,] "Seattle" "WA" "98104"
  21. [3,] "Hartford" "CT" "6161"
  22. [4,] "Denver" "CO" "80294"
  23. city state zipcode
  24. 1 Lowry CO 80230
  25. 2 Charlotte FL 33949
  26. city state zipcode
  27. 1 Tampa FL 33602
  28. 2 Seattle WA 98104
  29. 3 Hartford CT 6161
  30. 4 Denver CO 80294
  31. 5 Lowry CO 80230
  32. 6 Charlotte FL 33949

合并两个dataFrame

  1. #合并两个dataFrame,x和y
  2. #以c("bp","bmi","type")为key做join
  3. merged.Pima = merge(
  4. x = MASS::Pima.te, #如果已经装载入MASS库,就不用加MASS::
  5. y = MASS::Pima.tr,
  6. by.x = c("bp","bmi","type"),
  7. by.y = c("bp","bmi","type")
  8. )
  9. nrow(MASS::Pima.te)
  10. ncol(MASS::Pima.te)
  11. nrow(MASS::Pima.tr)
  12. ncol(MASS::Pima.tr)
  13. nrow(merged.Pima)
  14. ncol(merged.Pima)
  15. [1] 332
  16. [1] 8
  17. [1] 200
  18. [1] 8
  19. [1] 10
  20. [1] 13 # 8 + 8 - 3 = 13

分片

  1. MASS::ships[1:5,c("type","year")]
  2. type year
  3. 1 A 60
  4. 2 A 60
  5. 3 A 65
  6. 4 A 65
  7. 5 A 70
  8. # head(ships)和tail(ships)查看前后6条

函数

内置函数举例

  1. seq(5, 9, by = 0.4) #默认by为1
  2. mean(1:5)
  3. sum(1:5)
  4. [1] 5.0 5.4 5.8 6.2 6.6 7.0 7.4 7.8 8.2 8.6 9.0
  5. [1] 3
  6. [1] 15

自定义函数

  1. #可以使用默认参数
  2. myfunc = function(a = 2, b)
  3. {
  4. print(a + b)
  5. #只能返回一个值
  6. return(a * b)
  7. }
  8. product = myfunc(b = 3)
  9. print(product)
  10. [1] 5
  11. [1] 6

字符串

在R语言中,不区分单引号和双引号,但要求成对出现

  1. # 字符串拼接
  2. a = "Hello"
  3. b = "How"
  4. c = "are you?"
  5. # R语言非数值对象无法直接运算,字符串拼接要用paste
  6. #seperator分隔符默认为空格
  7. paste(a,b,c, sep = "-")
  8. [1] "Hello-How-are you?"
  9. #格式化输出
  10. format(23.123456, digits = 5) #digits表示显示5位有效数字
  11. format(3.14159, nsmall = 8) #nsmall表示小数点后至少8位
  12. format(23.123456, scientific = TRUE) #科学计数法
  13. format(23.123456, width = 10, justify = "right") #位宽为10,右对齐
  14. [1] "23.123"
  15. [1] "2.312346e+01"
  16. [1] "3.14159000"
  17. [1] " 23.12346"
  18. #统计字数
  19. nchar("hello world")
  20. [1] 11
  21. #大小写
  22. toupper("Hello World!")
  23. tolower("Hello World!")
  24. #字符串截取
  25. substring("Extract", 5, 7)
  26. [1] "act"

向量

向量是R语言中最基本的原子性数据对象,内部数据类型相同。即使只有一个值,也当做长度位1的向量

  1. #索引
  2. t = c("Sun", "Mon", "Tue", "Wed", "Thurs", "Fri", "Sat")
  3. t[c(1, 3, 5)]
  4. [1] "Sun" "Tue" "Thurs"
  5. #排序
  6. t = c("Sun", "Mon", "Tue", "Wed", "Thurs", "Fri", "Sat")
  7. sort(t, decreasing = TRUE) #默认是递增

列表

列表是比向量还要高级的数据对象,可以包含不同类型的元素,如数字、字符串、向量、其他列表等,使用list函数创建

创建

  1. #创建列表对象
  2. #本质上是5个对象
  3. list("Red", "Green", 21:25, TRUE, 51.23, 119.1)
  4. [[1]]
  5. [1] "Red"
  6. [[2]]
  7. [1] "Green"
  8. [[3]]
  9. [1] 21 22 23 24 25
  10. [[4]]
  11. [1] TRUE
  12. [[5]]
  13. [1] 51.23
  14. [[6]]
  15. [1] 119.1

索引

  1. # 可以命名列元素
  2. list_data = list(
  3. c("Jan","Feb","Mar"),
  4. matrix(1:6, nrow = 2),
  5. list("green", 12.3)
  6. )
  7. # 用name函数进行命名
  8. names(list_data) = c("item1", "item2", "item3")
  9. print(list_data)
  10. # 索引访问
  11. print(list_data[1])
  12. # 符号(命名访问)访问
  13. print(list_data[["item3"]][1])

添加&删除

  1. # 添加一列
  2. list_data[["new"]] = c("A","B","C")
  3. print(list_data)
  4. # 删除一列只要把那一列设为NULL即可

合并&把list转化成vector

  1. #合并
  2. l1 = list(1,2,3)
  3. l2 = list("Sun","Mon","Tue")
  4. c(l1,l2)
  5. [[1]]
  6. [1] 1
  7. [[2]]
  8. [1] 2
  9. [[3]]
  10. [1] 3
  11. [[4]]
  12. [1] "Sun"
  13. [[5]]
  14. [1] "Mon"
  15. [[6]]
  16. [1] "Tue"
  17. #list转为向量
  18. r = unlist(l1)
  19. r
  20. [1] 1 2 3

矩阵

矩阵是其中元素以二维矩形布局布置的R对象。 它们包含相同原子类型的元素。

创建

  1. # 用向量生成矩阵,4行,默认byrow=FALSE,即数据按列生成
  2. # 可以添加dimnames给维度命名
  3. M = matrix(1:12, nrow = 4, byrow = FALSE,
  4. dimnames = list(
  5. c("row1","row2","row3","row4"),
  6. c("col1","col2","col3")
  7. ))
  8. M
  9. col1 col2 col3
  10. row1 1 5 9
  11. row2 2 6 10
  12. row3 3 7 11
  13. row4 4 8 12

索引

  1. M[c("row1","row3"),1]
  2. # 行列索引,跟MATLAB一样,可以使用符号索引或者数字索引
  3. row1 row3
  4. 1 3

基本运算

  1. m1 = matrix(c(3, 9, -1, 4, 2, -6),nrow = 2)
  2. m2 = matrix(c(5, 2, 0, 9, 3, 4), nrow = 2)
  3. print(m1)
  4. print(m2)
  5. # 这里的直接+-*./都是一一对应的运算
  6. print(m1*m2)
  7. # %*%是整数乘法,t()函数是转置
  8. print(m1%*%t(m2))
  9. [,1] [,2] [,3]
  10. [1,] 3 -1 2
  11. [2,] 9 4 -6
  12. [,1] [,2] [,3]
  13. [1,] 5 0 3
  14. [2,] 2 9 4
  15. [,1] [,2] [,3]
  16. [1,] 15 0 6
  17. [2,] 18 36 -24
  18. [,1] [,2]
  19. [1,] 21 5
  20. [2,] 27 30

数组

数组可以储存2维以上的R数据对象

创建

  1. v1 = c(5,9,3)
  2. v2 = c(10:15)
  3. column.names <- c("COL1","COL2","COL3")
  4. row.names <- c("ROW1","ROW2","ROW3")
  5. matrix.names <- c("Matrix1","Matrix2")
  6. result = array(c(v1,v2),dim = c(3,3,2), #3x3x2维
  7. dimnames = list(row.names, #给维度取名
  8. column.names,
  9. matrix.names))
  10. print(result) #这里的数据发生了循环补全
  11. , , Matrix1
  12. COL1 COL2 COL3
  13. ROW1 5 10 13
  14. ROW2 9 11 14
  15. ROW3 3 12 15
  16. , , Matrix2
  17. COL1 COL2 COL3
  18. ROW1 5 10 13
  19. ROW2 9 11 14
  20. ROW3 3 12 15

索引

  1. result[c("ROW1","ROW2"),c(2,3),"Matrix2"]
  2. COL2 COL3
  3. ROW1 10 13
  4. ROW2 11 14

apply

  1. v3 = array(c(v1,v2),dim = c(2,3))
  2. print(v3)
  3. # apply传入的是数组,第二个参数是维度(此例中为列)即运算方向
  4. # 第三个参数为函数,也可以是自己写的
  5. apply(v3,c(2),sum)
  6. [,1] [,2] [,3]
  7. [1,] 5 3 11
  8. [2,] 9 10 12
  9. [1] 14 13 23

因子

因子是用于对数据进行分类并将其存储为级别的数据对象

是一种离散的数据类型

  1. data = c("East","West","East","North","North",
  2. "East","West","West","West","East","North")
  3. f = factor(data)
  4. f
  5. [1] East West East North North East West West West East North
  6. Levels: East North West

数据帧

统计中最重要的数据集合类型,类似于表格的形式

创建

  1. data = data.frame(
  2. id = 1:5,
  3. name = c("Rick","Dan","Michelle","Ryan","Gary"),
  4. salary = c(623.3,515.2,611.0,729.0,843.25),
  5. start_date = as.Date(c("2012-01-01", "2013-09-23",
  6. "2014-11-15", "2014-05-11",
  7. "2015-03-27"))
  8. stringsAsFactors = FALSE
  9. )
  10. data
  11. id name salary start_date
  12. 1 1 Rick 623.30 2012-01-01
  13. 2 2 Dan 515.20 2013-09-23
  14. 3 3 Michelle 611.00 2014-11-15
  15. 4 4 Ryan 729.00 2014-05-11
  16. 5 5 Gary 843.25 2015-03-27
  17. str(data) #structure查看数据帧结构
  18. 'data.frame': 5 obs. of 4 variables:
  19. $ id : int 1 2 3 4 5
  20. $ name : chr "Rick" "Dan" "Michelle" "Ryan" ...
  21. $ salary : num 623 515 611 729 843
  22. $ start_date: Date, format: "2012-01-01" "2013-09-23" ...

查看摘要信息

  1. summary(data)
  2. id name salary start_date
  3. Min. :1 Length:5 Min. :515.2 Min. :2012-01-01
  4. 1st Qu.:2 Class :character 1st Qu.:611.0 1st Qu.:2013-09-23
  5. Median :3 Mode :character Median :623.3 Median :2014-05-11
  6. Mean :3 Mean :664.4 Mean :2014-01-14
  7. 3rd Qu.:4 3rd Qu.:729.0 3rd Qu.:2014-11-15
  8. Max. :5 Max. :843.2 Max. :2015-03-27

索引

  1. data[1:3,c("name","salary")]
  2. name salary
  3. 1 Rick 623.3
  4. 2 Dan 515.2
  5. 3 Michelle 611.0

扩展数据帧

  1. # 添加列
  2. data["dept"] = c("IT","Operations","IT","HR","Finance")
  3. data
  4. id name salary start_date dept
  5. 1 1 Rick 623.30 2012-01-01 IT
  6. 2 2 Dan 515.20 2013-09-23 Operations
  7. 3 3 Michelle 611.00 2014-11-15 IT
  8. 4 4 Ryan 729.00 2014-05-11 HR
  9. 5 5 Gary 843.25 2015-03-27 Finance
  10. # 添加行
  11. emp.newdata = data.frame(
  12. id = c (6:8),
  13. name = c("Rasmi","Pranab","Tusar"),
  14. salary = c(578.0,722.5,632.8),
  15. start_date = as.Date(c("2013-05-21","2013-07-30","2014-06-17")),
  16. dept = c("IT","Operations","Fianance"),
  17. stringsAsFactors = FALSE
  18. )
  19. # 添加数据
  20. data
  21. emp.newdata
  22. rbind(data,emp.newdata)
  23. id name salary start_date dept
  24. 1 1 Rick 623.30 2012-01-01 IT
  25. 2 2 Dan 515.20 2013-09-23 Operations
  26. 3 3 Michelle 611.00 2014-11-15 IT
  27. 4 4 Ryan 729.00 2014-05-11 HR
  28. 5 5 Gary 843.25 2015-03-27 Finance
  29. 6 6 Rasmi 578.00 2013-05-21 IT
  30. 7 7 Pranab 722.50 2013-07-30 Operations
  31. 8 8 Tusar 632.80 2014-06-17 Fianance

R语言语法基础二的更多相关文章

  1. R语言语法基础一

    R语言语法基础一 Hello world #这里是注释 myString = "hello world" print(myString) [1] "hello world ...

  2. Ruby语法基础(二)

    Ruby语法基础(二) 继续ruby的学习,这次主要把目光放到运算符,条件判断,循环,方法,以及其他ruby特有的基本概念上 运算符 算术运算符:+,-,/,%,**,值的注意的是,ruby中一切皆为 ...

  3. R语言入门(二)基础语法

    1.help可以提供帮助,如help(nchar), help("[["),或者用?nchar也能获取帮助.example(nchar)可以获取到某个主题的使用方法. 2.ncha ...

  4. R语言︱情感分析—基于监督算法R语言实现(二)

    每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:本文大多内容来自未出版的<数据 ...

  5. R语言编程艺术(3)R语言编程基础

    本文对应<R语言编程艺术> 第7章:R语言编程结构: 第9章:面向对象的编程: 第13章:调试 ============================================== ...

  6. R语言学习-基础篇1

    ###第一周:R基础 rm(list = ls())  #ctr+L###矩阵相乘,函数diag()a=matrix(1:12,nrow=3,ncol=4)b=matrix(1:12,nrow=4,n ...

  7. R语言实战(二)数据管理

    本文对应<R语言实战>第4章:基本数据管理:第5章:高级数据管理 创建新变量 #建议采用transform()函数 mydata <- transform(mydata, sumx ...

  8. 转载 R语言颜色基础设置

    原文链接:http://www.biostatistic.net/thread-5065-1-1.html R语言在画图形的时候,经常遇到颜色设定问题,用户可以根据color.rgb值和hsv值来设定 ...

  9. R 语言学习(二)—— 向量

    1. 入门 将摄氏度转化为华氏度 >> 27*1.8+32 [1] 80.6 [1]:表示数字的向量索引号,在 R 语言中任何一个数字都看作一个向量. 向量化 >> temp ...

随机推荐

  1. vs2017初学c++环境配置及使用教程

    https://blog.csdn.net/jmpan_sjtu/article/details/79053169 https://blog.csdn.net/luoyu510183/article/ ...

  2. C# 正则表达式匹配盘符

    if (!Regex.IsMatch(diskName, @"^[c-zC-Z](:\\)?$")) { throw new FormatException($"{dis ...

  3. DBEntityEntry类

    DBEntityEntry是一个重要的类,可用于检索有关实体的各种信息.您可以使用DBContext的Entry方法获取特定实体的DBEntityEntry实例. DBEntityEntry允许您访问 ...

  4. 用Web api /Nancy 通过Owin Self Host简易实现一个 Http 服务器

    过去做 端游的Http 服务器 用的WebApi 或者Mvc架构,都是放在iis...而我已经是懒出一个地步,并不想去配iis,或者去管理iis,所以我很喜欢 Self host 的启动方式. C#做 ...

  5. adb devices unauthorized解决办法

    进行Android项目调试时,连接完设备,进行adb install ******.apk时,偶遇 adb devices unauthorized 这个小东西,解决办法:将手机设置->辅助功能 ...

  6. 构建简单的json树形菜单

    json结构: var Menu = [{ tit:"一级菜单", submenu:[{ tit:"二级菜单", url:"", func: ...

  7. docker inspect命令

    docker inspect -f {{.NetworkSettings.Networks.crawling_pro.NetworkID}} crawling_internationalmacro_p ...

  8. 059 SparkStream介绍

    离线计算框架:MR,hive-->对时间要求不严格 实时计算框架:SparkCore-->要求job执行时间比较快 交互式计算框架:SparkSQL,Hive,-->提供SQL操作的 ...

  9. weka的基本使用

    目录: 1. 简介 2.界面初识 3.数据格式 4.数据准备 5.关联规则 6.分类与回归 7.聚类分析 8.Weka相关资料 9.Weka二次开发 10.Weka源代码导入 1. 简介 WEKA的全 ...

  10. 问题 L: An Invisible Hand - (2018年第二阶段个人训练赛第三场)

    题目描述 There are N towns located in a line, conveniently numbered 1 through N. Takahashi the merchant ...