最近在看一些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  # 这个在pandas中类似于Series.isin()函数,其他的><=都可在括号内判断
[1] 1 4 4
> a[-1] #-号为除去某个值,在Python中则为逆序选择 
[1] 2.3 4.0

矩阵

R语言数组怎么转换为集合 r语言list转numeric_R语言数组怎么转换为集合

> 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,]  # 不写默认选择所有,Python中需写:
  [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)  # 类似于Python的shape函数
[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  # 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

R语言数组怎么转换为集合 r语言list转numeric_R语言数组怎么转换为集合_02

数据填写&文件读取

edit()可以通过键盘编辑数据或fix()
read.table(file, header=logical, sep=',', row.names)  # 可以读取文本文件csv文件可以直接read.csv

xls表格

Library(RODBC)
Channel = odbcConnectExcel('file.xls)
Df = sqlFetch(Channel, 'sheet')
adbcClose(Channel)

xlsx表格

Library(xlsx)
Df=read.xlsx(file.xlsx, 1)   # 数字为第几个工作表

R 中还有一个包,rio包,可以读取大多数文件函数也简单

Library(rio)
Channel = import('file.xlsx)
export(Channel, 'ex_file.xlsx')
export(Channel, 'ex_file.csv')
# 也可以在表中加新表
export(Channel, 'ex_file.xlsx', which='sheet2')