最近在看一些R语言,顺便记录一下R语言的基础操作,以后查找方便 R语言更多的用于数据分析中,算是一个比较有特色的一个语言 学习的主要内容为 数据类型 数据结构 函数 控制流(判断循环) 文件读取
数据类型
R数据类型主要为字符character,数字numeric,和逻辑值logical is.numeric()可以判断类型as.numeric()可转换类型,这与一般语言基本类似,不过一般数值型分为浮点、整型等
数据结构
结构主要为向量 数组 矩阵 数据框 列表等,向量是R语言的基础,单个数字也是单个向量,向量数据框类似于Python的pandas的series和dataframe,数组矩阵Python中主要是numpy库的函数 R 有几个特点,与Python类似,不必声明变量,变量创建时会自动识别类型,所有序号从1开始,这与大部分语言都不同(从0开始),注释与Python相同加#,但没有块注释(Python中为""" “”") 赋值是使用<-(快捷键alt±),真要用=其实也行 对于一个数据结构主要了解其生成,子集选择,相互运算
向量
生成方式有几种
> a <- c(1,2.3,4); a
[1] 1.0 2.3 4.0
> 1:4
[1] 1 2 3 4
> rep("a",times=3)
[1] "a" "a" "a"
> rnorm(n=3)
[1] -0.3918248 -0.4553021 0.2116822
> paste0(rep("a",times=3),1:3)
[1] "a1" "a2" "a3"
向量之间的运算
> b <- 1:5
> a==b
[1] TRUE FALSE FALSE FALSE FALSE
> b[6]=4
> a==b
[1] TRUE FALSE FALSE FALSE FALSE TRUE
两个长度不相等的向量比较会把短的进行循环比较 交并集
> union(a,b)
[1] 1.0 2.3 4.0 2.0 3.0 5.0
> setdiff(a,b)
[1] 2.3
> setdiff(b,a)
[1] 2 3 5
结果类似于Python的集合 子集的选择有两种,按照序列号选择,按照条件真值选择 如选择b中有a的数字,这个在pandas中类似于Series.isin()函数,其他的><=都可在括号内判断
> a
[1] 1.0 2.3 4.0
> b
[1] 1 2 3 4 5 4
> c = b[b %in% a];c
[1] 1 4 4
> a[-1]
[1] 2.3 4.0
矩阵
> m = matrix(1:100,nrow = 10)
> m
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 1 11 21 31 41 51 61 71 81 91
[2,] 2 12 22 32 42 52 62 72 82 92
[3,] 3 13 23 33 43 53 63 73 83 93
[4,] 4 14 24 34 44 54 64 74 84 94
[5,] 5 15 25 35 45 55 65 75 85 95
[6,] 6 16 26 36 46 56 66 76 86 96
[7,] 7 17 27 37 47 57 67 77 87 97
[8,] 8 18 28 38 48 58 68 78 88 98
[9,] 9 19 29 39 49 59 69 79 89 99
[10,] 10 20 30 40 50 60 70 80 90 100
> m[2,2]
[1] 12
> m[2,]
[1] 2 12 22 32 42 52 62 72 82 92
> m[1:3,c(3,5,7)]
[,1] [,2] [,3]
[1,] 21 41 61
[2,] 22 42 62
[3,] 23 43 63
数组的创建
z = array(1:24, c(2,3,4), dimnames = list(c('a1','a2'),c('b1','b2','b3'),paste0('c',1:4)))
> z
, , c1
b1 b2 b3
a1 1 3 5
a2 2 4 6
, , c2
b1 b2 b3
a1 7 9 11
a2 8 10 12
, , c3
b1 b2 b3
a1 13 15 17
a2 14 16 18
, , c4
b1 b2 b3
a1 19 21 23
a2 20 22 24
数组和矩阵中只能是数字,数字可以是多维
数据框
数据框是简单数据分析较常用的格式
> data.frame(a,b)
a b
1 1.0 1
2 2.3 2
3 4.0 3
4 1.0 4
5 2.3 5
6 4.0 4
> df <- data.frame(a,b)
> dim(df)
[1] 6 2
> rownames(df)
[1] "1" "2" "3" "4" "5" "6"
> nrow(df)
[1] 6
数据框的选择与前面类似,df[1:3]为1到3列,而Python中表示1到3行,R语言中$可以选择子集,类似于Python的df.a
> df$a
[1] 1.0 2.3 4.0 1.0 2.3 4.0
> df[df['b']>3,]$a
[1] 1.0 2.3 4.0
na.omit(df)
> a <- c(1,2,3)
> b <- c(4,5,6,7)
> rbind(a,b)
[,1] [,2] [,3] [,4]
a 1 2 3 1
b 4 5 6 7
Warning message:
In rbind(a, b) :
number of columns of result is not a multiple of vector length (arg 1)
> cbind(a,b)
a b
[1,] 1 4
[2,] 2 5
[3,] 3 6
[4,] 1 7
Warning message:
In cbind(a, b) :
number of rows of result is not a multiple of vector length (arg 1)
遇到长度不一致,缺失循环自动补齐 merge函数可以根据同一个列索引合并两个数据框 对行和列处理时可以用apply函数 ==apply(X, MARGIN, FUN, …) == 其中X是数据框/矩阵名; MARGIN为1表示取行,为2表示取列, FUN是函数
函数
函数结构与大多数语言类似可以设置实参形参
myf <- function(x,y=3){
z=x+y
z}
有返回值可以直接返回,或使用return()
控制流
循环
for (var in seq){statement}
while(cond){statement}
条件语句
If (cond) {}else{}
Ifelse(cond,a,b)
switch
数据填写&文件读取
edit()可以通过键盘编辑数据或fix()
read.table(file, header=logical, sep=',', row.names)
xls表格
Library(RODBC)
Channel = odbcConnectExcel('file.xls)
Df = sqlFetch(Channel, 'sheet')
adbcClose(Channel)
xlsx表格
Library(xlsx)
Df=read.xlsx(file.xlsx, 1)
暂时先到这,以后看来再写吧
|