- 基础内容来自
W3C
,直接查看这里即可,这里只是个人学习的记录 - 只是最近感觉有必要学习一下
R
,哈哈
一、基础
1、概述
3、数据类型
|
|
(2) List
列表
- 列表是一个R对象,它可以在其中包含许多不同类型的元素
|
|
(3) Matrix
矩阵
- 矩阵被限制为二维12345> M = matrix( c('a','a','b','c','b','a'), nrow = 2, ncol = 3, byrow = TRUE)> print(M)[,1] [,2] [,3][1,] "a" "a" "b"[2,] "c" "b" "a"
(4) Array
数组
dim
指定维度,这里穿创建3x3x2
的三维矩阵,输入是向量(一致循环创建)
|
|
(5) Factor
因子
- 因子是使用向量创建的r对象。
nlevels
函数可以得到因子中不重复值的个数123456> factor_content <- factor(c('green', 'red', 'green', 'yellow', 'red', 'green'))> print(factor_content)[1] green red green yellow red greenLevels: green red yellow> print(nlevels(factor_content))[1] 3
(6) Data Frame
数据帧
数据表
1234567891011> BMI <- data.frame(+ gender = c("Male", "Male","Female"),+ height = c(152, 171.5, 165),+ weight = c(81,93, 78),+ Age = c(42,38,26)+ )> print(BMI)gender height weight Age1 Male 152.0 81 422 Male 171.5 93 383 Female 165.0 78 26names(data.frame对象)
查看列名row.names
查看行名
4、变量
(1) 命名
- 有效的变量名称由字母,数字和点或下划线字符组成
- 列如:
var_name2.
,.var_name
var.name
(2) 赋值
- 可以使用
=, <-, ->
=
和<-
的区别是一个是传值,一个是赋值,一般使用<-
123456789> var.1 = c(0,1,2,3)> var.2 <- c("learn","R")> c(TRUE,1) -> var.3> print(var.1)[1] 0 1 2 3> print(var.2)[1] "learn" "R"> print(var.3)[1] 1 1
(3) 查找变量
- 使用
ls()
函数
|
|
- 通过模式匹配查找
|
|
- 以点
.
开头的变量名字会被隐藏,可以print(ls(all.name = TRUE))
列出所有的
(4) 删除变量
- 单个变量通过
rm(变量名)
删除 - 删除所有变量:
rm(list = ls())
5、运算符
(1) 算数运算符
%%
: 求余%/%
: 相除求商^
: 指数(2) 关系运算符
- 和
c
等语言一样(3) 逻辑运算符
&
: 与and
,两个&&
只比较第一个(比如向量只比较第一个元素)|
: 或or
, 两个||
一样
(4) 其他
:
|
|
%in%
: 元素是否在一个向量中
6、包
(1) 介绍
R
语言的包是R函数,编译代码和样本数据的集合。- 存储在
R
语言环境中名为“library”
的目录下 - 可用的
R
语言的包:点击查看(2) 常用命令
- 查看库的位置:
.libPaths()
- 查看已安装所有软件包:
library()
- 当前环境加载的所有包:
search()
- 安装包:
install.packages("Package Name")
- 加载到当前
R
语言环境中:library("package Name", lib.loc = "path to library")
(3) 手动安装包
- 将包作为
.zip
文件保存在本地系统中的适当位置。 - 安装:
install.packages("E:/XML_3.98-1.3.zip", repos = NULL, type = "source")
7、数据重塑Dataframe
(1) 数据帧中加入行和列
cbind()
连接多个向量
|
|
rbind()
按行拼接(2) 合并数据帧
- 使用
merge()
函数合并两个数据帧。 数据帧必须具有相同的列名称,在其上进行合并。1234567891011121314151617181920212223242526> library(MASS)> merged.Pima <- merge(x = Pima.te, y = Pima.tr,+ by.x = c("bp", "bmi"),+ by.y = c("bp", "bmi")+ )> print(merged.Pima)bp bmi npreg.x glu.x skin.x ped.x age.x type.x npreg.y glu.y skin.y ped.y age.y type.y1 60 33.8 1 117 23 0.466 27 No 2 125 20 0.088 31 No2 64 29.7 2 75 24 0.370 33 No 2 100 23 0.368 21 No3 64 31.2 5 189 33 0.583 29 Yes 3 158 13 0.295 24 No4 64 33.2 4 117 27 0.230 24 No 1 96 27 0.289 21 No5 66 38.1 3 115 39 0.150 28 No 1 114 36 0.289 21 No6 68 38.5 2 100 25 0.324 26 No 7 129 49 0.439 43 Yes7 70 27.4 1 116 28 0.204 21 No 0 124 20 0.254 36 Yes8 70 33.1 4 91 32 0.446 22 No 9 123 44 0.374 40 No9 70 35.4 9 124 33 0.282 34 No 6 134 23 0.542 29 Yes10 72 25.6 1 157 21 0.123 24 No 4 99 17 0.294 28 No11 72 37.7 5 95 33 0.370 27 No 6 103 32 0.324 55 No12 74 25.9 9 134 33 0.460 81 No 8 126 38 0.162 39 No13 74 25.9 1 95 21 0.673 36 No 8 126 38 0.162 39 No14 78 27.6 5 88 30 0.258 37 No 6 125 31 0.565 49 Yes15 78 27.6 10 122 31 0.512 45 No 6 125 31 0.565 49 Yes16 78 39.4 2 112 50 0.175 24 No 4 112 40 0.236 38 No17 88 34.5 1 117 24 0.403 40 Yes 4 127 11 0.598 28 No> nrow(merged.Pima)[1] 17
(3) 拆分和重组
melt()
拆分数据 (以船舶的数据集为例)- 需要安装
reshape
包 install.packages("reshape")
12345678910111213141516171819202122232425262728293031323334353637383940414243> library(MASS)> print(ships)type year period service incidents1 A 60 60 127 02 A 60 75 63 03 A 65 60 1095 34 A 65 75 1095 45 A 70 60 1512 66 A 70 75 3353 187 A 75 60 0 08 A 75 75 2244 119 B 60 60 44882 3910 B 60 75 17176 2911 B 65 60 28609 5812 B 65 75 20370 5313 B 70 60 7064 1214 B 70 75 13099 4415 B 75 60 0 016 B 75 75 7117 1817 C 60 60 1179 118 C 60 75 552 119 C 65 60 781 020 C 65 75 676 121 C 70 60 783 622 C 70 75 1948 223 C 75 60 0 024 C 75 75 274 125 D 60 60 251 026 D 60 75 105 027 D 65 60 288 028 D 65 75 192 029 D 70 60 349 230 D 70 75 1208 1131 D 75 60 0 032 D 75 75 2051 433 E 60 60 45 034 E 60 75 0 035 E 65 60 789 736 E 65 75 437 737 E 70 60 1157 538 E 70 75 2161 1239 E 75 60 0 040 E 75 75 542 1
- 需要安装
拆分
melt()
将类型和年份以外的所有列转换为多行展示123456789101112131415161718192021222324252627282930313233343536373839library(reshape)molten.ships <- melt(ships, id = c("type","year"))print(molten.ships)type year variable value1 A 60 period 602 A 60 period 753 A 65 period 604 A 65 period 75........................9 B 60 period 6010 B 60 period 7511 B 65 period 6012 B 65 period 7513 B 70 period 60......................41 A 60 service 12742 A 60 service 6343 A 65 service 1095......................70 D 70 service 120871 D 75 service 072 D 75 service 205173 E 60 service 4574 E 60 service 075 E 65 service 789......................101 C 70 incidents 6102 C 70 incidents 2103 C 75 incidents 0104 C 75 incidents 1105 D 60 incidents 0106 D 60 incidents 0......................
cast()
重构数据- 每年每种类型的船的总和1234567891011121314151617181920212223> recasted.ship <- cast(molten.ships, type+year~variable,sum)> print(recasted.ship)type year period service incidents1 A 60 135 190 02 A 65 135 2190 73 A 70 135 4865 244 A 75 135 2244 115 B 60 135 62058 686 B 65 135 48979 1117 B 70 135 20163 568 B 75 135 7117 189 C 60 135 1731 210 C 65 135 1457 111 C 70 135 2731 812 C 75 135 274 113 D 60 135 356 014 D 65 135 480 015 D 70 135 1557 1316 D 75 135 2051 417 E 60 135 45 018 E 65 135 1226 1419 E 70 135 3318 1720 E 75 135 542 1
- 每年每种类型的船的总和
8、函数
(1) 定义
|
|
(2) 自定义函数和调用
|
|
9、字符串
(1) 定义
- 可以使用单引号或双引号
|
|
(2) 字符串操作
- 连接字符串:
paste(..., sep = " ", collapse = NULL)
...
表示要组合的任意数量的自变量。sep
表示参数之间的任何分隔符。 它是可选的。collapse
用于消除两个字符串之间的空格。但不是一个字符串的两个字内的空间。
- 格式化字符串:
format(x, digits, nsmall, scientific, width, justify = c("left", "right", "centre", "none"))
x
是向量输入。digits
是显示的总位数。nsmall
是小数点右边的最小位数。- 科学设置为
TRUE
以显示科学记数法。 width
指示通过在开始处填充空白来显示的最小宽度。justify
是字符串向左,右或中心的显示。
- 字符数:
nchar()
- 大小写:
toupper()
和tolower()
- 截取:
substring(x,first,last)
10、向量
|
|
(2) 访问向量元素
- 使用索引访问向量的元素。
[]
括号用于建立索引。 索引从位置1
开始。 位置索引
- 注意位置是从
1
开始的1234t <- c("Sun","Mon","Tue","Wed","Thurs","Fri","Sat")u <- t[c(2,3,6)]print(u)[1] "Mon" "Tue" "Fri"
- 注意位置是从
负数索引
- 使用负数是丢弃掉对应正数的索引123x <- t[c(-2,-5)]print(x)[1] "Sun" "Tue" "Wed" "Fri" "Sat"
- 使用负数是丢弃掉对应正数的索引
排序
|
|
11、列表
可以通过索引和名字访问
12345678910111213141516171819202122232425262728> list_data <- list(c("Jan","Feb","Mar"), matrix(c(3,9,5,1,-2,8), nrow = 2),+ list("green",12.3))> print(list_data)[[1]][1] "Jan" "Feb" "Mar"[[2]][,1] [,2] [,3][1,] 3 5 -2[2,] 9 1 8[[3]][[3]][[1]][1] "green"[[3]][[2]][1] 12.3> names(list_data) <- c("1st Quarter", "A_Matrix", "A Inner list")> print(list_data[1])$`1st Quarter`[1] "Jan" "Feb" "Mar"> print(list_data$A_Matrix)[,1] [,2] [,3][1,] 3 5 -2[2,] 9 1 8合并列表:
merged.list <- c(list1,list2)
- 列表转向量:
v1 <- unlist(list1)
12、矩阵
- 矩阵是其中元素以二维矩形布局布置的R对象。
- 包含相同原子类型的元素。
matrix(data, nrow, ncol, byrow, dimnames)
- data数据是成为矩阵的数据元素的输入向量。
- nrow是要创建的行数。
- ncol是要创建的列数。
- byrow是一个逻辑线索。如果为TRUE,则输入向量元素按行排列。
- dimname是分配给行和列的名称。
13、数组
14、因子
- 因子是用于对数据进行分类并将其存储为级别的数据对象。 它们可以存储字符串和整数。
- 它们在具有有限数量的唯一值的列中很有用。像“男性”,“女性”和True,False等。它们在统计建模的数据分析中很有用。
|
|
15、数据帧
summary()
|
|
- 取数据前两行
result <- emp.data[1:2,]
result <- emp.data[c(3,5),c(2,4)]
- 扩展数据
emp.data$dept <- c("IT","Operations","IT","HR","Finance")
- 添加行:
emp.finaldata <- rbind(emp.data,emp.newdata)
二、dplyr
包
1、基本操作
- 安装:
install.packages("dplyr")
(1) 筛选
筛选行:
filter()
- 前面是
dataframe
数据,后面是筛选的条件,这里是筛选列名为eval_set
的数据 - 也可以使用管道的方式:datafame %>% filter(eval_set == “prior”)1filter(dataframe, eval_set == "prior")
- 前面是
筛选列:
select()
- 筛选列名为
user_id, product_id
的列,使用负号表示去除对应的列 - 可以使用管道的方式:
ordert %>% select(user_id, product_id, reordered)
1select(ordert, user_id, product_id)
- 筛选列名为
(2) 排序arrange()
按给定的列名依次进行排序(默认升序)
- 管道的方式:
orders_products %>% arrange(user_id, order_number, product_id)
1arrange(df, user_id, order_number, product_id)
- 管道的方式:
降序排列
|
|
(3) 变形mutate()
- 对已有列进行数据运算并添加为新列
|
|
(4) 汇总
|
|
2、分组
- 当对数据集通过
group_by()
添加了分组信息后,mutate(), arrange() 和 summarise()
函数会自动对这些tbl
类数据执行分组操作 (R语言泛型函数的优势).
|
|
Reference
- 本文链接: http://lawlite.me/2017/06/30/R语言学习/
- 版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 许可协议 。转载请注明出处!