一、基本操作
1、mathmatic operations
与其他无异
2、注释
用 # 来引导一句注释
a->95 #this is a piece of explanation
3、数据类型及基本操作
r语言中的数据类型与python等类似,无需在定义的时候指定,各种数据类型也可以直接转换,如以下一段代码
a = 1
a = 'wk'
a最终会被定义为string ”wk”;
string
A String variable can be declared in either double quotes("") or single quotes (’’)
- 赋值
A = 'wangsky'
A = "wangsky"
A <- "wangsky"
A <- 'wangsky'
以上四句指令运行结果相同
vector
与matlab和sas等数据处理语言类似,r语言中所有变量都是以向量或矩阵的形式储存的;
- 赋值
a = c ( 1 ,2 ,3 )
b=c('a','b','c','d')
c=c("wangsky",1,2)
注意c的赋值会导致1和2都被储存为string类型
除了直接赋值外,还可以通过一些函数快速赋值,如下
a=1:5 ## a=[1,2,3,4,5]
a=seq(1:5) ## a=[1,2,3,4,5]
a=seq(1:10:2) ## a=[1,3,5,7,9]
a=rep(95,3) ## a=[95,95,95]
a=rep("wangsky",3) ## a=["wangsky","wangsky","wangsky"]
a=rep(c('wang','sky'),3) ## a=['wang','sky','wang','sky','wang','sky']
注意在r中数据用单引号‘’和双引号“”不会造成任何区别,都会被当作字符串处理
通过对新元素的赋值可以直接在vector中增加元素,没有被赋值的元素缺省值为NA
- 查找元素indexing
与数组的处理类似,不同的是其下标从1开始
a<-c(8,5,10,5)
a[1] ## 8
可以通过负数的index删除元素
a[-1] # [5,10,5] 但不会改变a的实际值
a=a[-2] # a变为[8,10,5]
index也可以是一个向量,这时可以一次性查找或重新赋值多个元素
ind=c(1,3)
a[ind] # 返回 [ 8 , 10 ]
a[c(2,4)]=c(50,50) # a变为[8,50,10,50]
a[1:2]=c(95,95) # a变为[95,95,10,50]
- rdist() functions
从指定分布(distribution)中随机抽取数据
runif(n = 10) # 10 samples from Unif(0, 1) 均匀分布
rnorm(n = 10) # 10 samples from Norm(0, 1) 正态分布
rpois(n = 10) # 10 samples from Poisson(1) 泊松分布
rexp(n = 10) # 10 samples from Exp(1) 指数分布
# 100 samples from a Norm(20, 5) distribution
rnorm(n = 100, mean = 20, sd = 5) # mean代表平均值,sd代表标准差
以上函数可以直接赋值给变量,会生成长度为n的向量
输入 ?Distributions可以获取所有可用的distributions
vector operations
- 基本运算
加减法与向量加减法相同
乘除法都是分别每个元素相乘除
幂次计算也是每个元素做幂次运算
内积计算:
X=c(1:4)
X %*% X # dot (inner) product
#result is 30
-
比较操作
所有比较操作都是每个对应元素单独比较,返回长度为n的bool向量
两个长度不相等的向量无法比较 -
Helpful Functions
mean(X) # mean
sd(X) # standard deviation 标准差
var(X) # variance 方差
max(X) # maximum
min(X) # minimum
median(X) # median
sum(X) # sum
prod(X) # product 所有元素乘积
quantile(X,probs=0.5) # quantile for specified probs 特定概率分位点
length(X) # length of the vector
range(X) # range
4、Control and Functions
一个完整的实例,判断向量里的三个数能否构成三角形:
is_good <- function(vec) { # is_good是函数名,vec是变量名
if (length(vec) != 3) { # 内置函数length
# Always a good idea to make sure your function gets what it expects to get
stop('is_good requires a vector of length 3') # 内置函数STOP
}
for (i in 1:3) {
# Check if element i is greater than sum of other two elements
if (vec[i] > sum(vec[-i])) { 内置函数sum
return(FALSE)
}
}
return(TRUE)
}
5、Packages
install packages:install.packages(“package name”)
load packages:library(“package name”)
use functions without loading:package_name::function_name( )
二、Dataframes
Each column represents a variable/feature
Each row represents an observation/instance
需要以下package:
library("tidyverse")
1、基础操作
tibble()用来创建一个data frame
data <- tibble( # start tibble()
age = c(24, 22, 23, 25, 22),
personality = c('g', 'b', 'g', 'b', 'g'),
income = c(2000, 5800, 4200, 1500, 6000)
) # finish the tibble() function
$ 或者 [ ] 用来查找元素:
data$age ## [1] 24 22 23 25 22 返回的列向量
data['age'] ## [1] 24 22 23 25 22 返回的是新dataframe
data[1] ## [1] 24 22 23 25 22 返回的是新的dataframe
data[1,2] ## [1] 22
data[ ,2] ## [1] g b g b g
data[1, ] 24 'g' 2000
在[ ]中可以用列的名称代替数字,这是因为每一列在创建时都是有名字的
而行则不可以,只能用数字指代
如果 [ ] 中如果只有一个元素,则默认为行
[ ]中的index也可以是vector,返回的依旧是dataframe 例如:
data[1:3, c('age', 'income')]
data[c(1, 4), 2:3]
conditional indexing
#find the 22-year-olds
ind <- data$age == 22 #先获得一个bool 向量
data[ind, ] # index rows by binary vector ind
Column names
colnames( dataname)函数可以用来查看列名称或者修改列的名称
colnames(data)=c('a','b','c')
2、读写
3、进阶操作 dplyr
str( dataname ) 函数用来展示完整的dataframe
unique(data_name$column_name) 返回该列所有的不同元素
dplyr is a package that provides a convenient framework (along with a handful of useful functions) for wrangling data (frames). dplyr is a part of the tidyverse
verb: A verb in the world of dplyr is a function that :
- takes a data frame as its first argument, and
- returns another data frame as a result
Five basic verbs:
3-1 SELECTING ROWS
filter():
filter(dataframe, conditions)
conditions can be:
- bool表达式, i.e.: age>18&&gender==‘F’
- %in% 来实现collection,i.e.: filter(data, age %in% c(15,20))
slice:
slice可以按照行数选择
slice( my_data,1:10)
在verb里面用n()可以表示dataframe的总行数。如:
slice( my_data, (n()-20):n() )
3-2 SELECTING COLUMN
select:
select (my_data, length)
select(my_data,-width) # 除width行之外的所有行
还有其他一些有用的限制条件如end_with,begin_with
详情见:
? select
3-3 CREATING NEW COLUMNS
mutate:
mutate( data ,newcolumn=length/width ) #通常从已有的列中得到新列
transmute:
与mutate命令不同的是,该命令的返回值为只包含新列的一个dataframe
3-4 SORTING
arrange:sorting rows by column values
默认为升序,加dec()变为降序,可以对多个变量排序。如下:
arrange(diamonds, carat, price)
arrange(diamonds, carat, desc(price))
arrange(diamonds, desc(carat), desc(price))
3-5 AGGREGATING
summarize: